Czy QgsMapLayerRegistry jest usuwane w QGIS3?


20

Czy QgsMapLayerRegistrybędzie dostępnej w pyqgis z QGIS3

Kiedy wpisałem go w konsoli python QGIS (2.99), wydaje się, że python rozpoznaje go, ponieważ wykonuje się automatycznie qgis.core.QgsMapLayerRegistry, ale następnie podaje błąd, że go nie ma:

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'

Próbowałem tego z dwiema wersjami QGIS 2.99 (jedna w 01/07 i w 06/17). Obie wersje dają ten sam błąd. importteż nie działa:

>>>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'

Czy został QgsMapLayerRegistryusunięty w QGIS3?

Odpowiedzi:


27

Tak, został usunięty, ale istnieją alternatywy.

Zmiany interfejsu API 3.0 są wymienione tutaj:

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

QgsMapLayerRegistry: Jego funkcjonalność została przeniesiona do QgsProject.

Głównym powodem jest to, że QgsMapLayerRegistry jest / był singletonem i dlatego może istnieć tylko jeden rejestr. Po usunięciu tego ograniczenia główne przeszkody utrudniają wdrażanie nowych rzeczy, takich jak otwieranie wielu projektów obok siebie.


myślę, że odpowiedź jest wciąż niepełna.
— Abhijit Gujar

2
Myślę, że musisz podać więcej informacji, dlaczego uważasz, że odpowiedź jest wciąż niepełna.
— Matthias Kuhn

jeśli używasz QgsProject.instance (), jak to rozwiązuje problem singletonu?
— Mickey Perlstein,

@MickeyPerlstein masz rację, jeśli używasz QgsProject.instance (), to nie jest rozwiązane. Jednak samodzielne aplikacje można już teraz wdrożyć w wielu projektach, a kod serwera QGIS jest również przenoszony w tym kierunku. W dłuższej perspektywie QgsProject.instance () może całkowicie zniknąć.
— Matthias Kuhn

nie rozumiem, jak przejście od używania singletonu z jednej strony do singletonu z drugiej strony zmienia możliwość uruchamiania wielu instancji (które i tak otrzymują tę samą instancję singletona (z definicji) ... czy nie byłoby sensu mieć aplikacja singleton, która uruchamia instancje? pozwoliłaby również na znacznie łatwiejszą interoperacyjność i rozszerzalność (coś w rodzaju sdk pakietu Microsoft Office, w którym można połączyć się z istniejącą otwartą instancją biura lub otworzyć nową instancję
— Mickey Perlstein

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.