Чи видаляється QgsMapLayerRegistry у QGIS3?


20

Є чи QgsMapLayerRegistryбуде Availabe в pyqgis з QGIS3

Коли я набрав його в консоль QGIS python (2.99), схоже, python розпізнає це, оскільки він автоматично завершується qgis.core.QgsMapLayerRegistry, але потім видає помилку, що його немає:

Traceback (most recent call last):
  File "/usr/lib/python3.5/code.py", line 91, in runcode
    exec(code, self.locals)
  File "<input>", line 1, in <module>
AttributeError: module 'qgis.core' has no attribute 'QgsMapLayerRegistry'

Я спробував це з двома версіями QGIS 2.99 (одна у 01/07 та в 06/17). Обидві версії дають однакову помилку. importне працює:

>>>from qgis.core import QgsMapLayerRegistry
Traceback (most recent call last):
  File "/usr/lib/python3.5/code.py", line 91, in runcode
    exec(code, self.locals)
  File "<input>", line 1, in <module>
ImportError: cannot import name 'QgsMapLayerRegistry'

Чи QgsMapLayerRegistryвидаляється в QGIS3?

Відповіді:


27

Так, це було видалено, але альтернативи існують.

Зміни API 3.0 перераховані тут:

https://qgis.org/api/api_break.html

QgsMapLayerRegistry: Його функціональність переміщено до QgsProject.

Основна причина полягає в тому, що QgsMapLayerRegistry є / був синглтоном, і тому міг існувати лише один реєстр. Коли це обмеження усунене, основні дорожні пробки не в змозі впроваджувати нові речі, такі як відкриття декількох проектів поруч.


Я думаю, що відповідь все ще неповна.
Абхіджіт Гуджар

2
Я думаю, вам потрібно дати більше інформації, чому ви вважаєте, що відповідь все ще є неповною.
Маттіас Кун

якщо ви використовуєте QgsProject.instance (), як це вирішує проблему singleton?
Міккі Перлштайн

@MickeyPerlstein ви праві, якщо ви використовуєте QgsProject.instance (), це не вирішено. Однак автономні програми вже зараз можуть реалізовуватися з кількома проектами, і код сервера QGIS також переміщується в цьому напрямку. У перспективі QgsProject.instance () може повністю зникнути.
Маттіас Кун

я не розумію, як перехід від використання синглтона на одній частині до синглтона на іншій частині змінює здатність запускати декілька екземплярів (що так чи інакше отримують один і той же екземпляр сингтона (за визначенням) ... не було б більше сенсу мати додаток для одиночних програм, що отримує запущені екземпляри? Це також дозволило б набагато полегшити взаємодію та розширюваність (на кшталт microsoft office sdk, де ви можете підключитися до наявного відкритого примірника офісу або відкрити новий екземпляр
Міккі Перлштайн

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.