QgsMapLayerRegistry est-il supprimé dans QGIS3?

20

Est QgsMapLayerRegistryva être availabe dans PyQGIS avec QGIS3

Lorsque je l'ai tapé dans la console python QGIS (2.99), python semble le reconnaître car il se complète automatiquement qgis.core.QgsMapLayerRegistry, mais donne ensuite une erreur indiquant qu'il n'est pas là:

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'

J'ai essayé cela avec deux versions de QGIS 2.99 (une en 01/07 et en 06/17). Les deux versions donnent la même erreur. importne fonctionne pas non plus:

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

Est QgsMapLayerRegistrysupprimé dans QGIS3?

tinlyx
la source

Réponses:

27

Oui, il a été supprimé, mais des alternatives existent.

Les modifications de l'API 3.0 sont répertoriées ici:

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

QgsMapLayerRegistry: Sa fonctionnalité a été déplacée vers QgsProject.

La raison principale est que QgsMapLayerRegistry est / était un singleton et donc qu'un seul registre pourrait jamais exister. Une fois cette contrainte supprimée, les principaux obstacles sont hors de portée pour implémenter de nouvelles choses comme l'ouverture simultanée de plusieurs projets.

Matthias Kuhn
la source
je pense que la réponse est encore incomplète.
Abhijit Gujar
2
Je pense que vous devez donner plus d'informations sur les raisons pour lesquelles vous pensez que la réponse est encore incomplète.
Matthias Kuhn
si vous utilisez QgsProject.instance (), comment cela résout-il le problème de singleton?
Mickey Perlstein
@MickeyPerlstein vous avez raison, si vous utilisez QgsProject.instance () ce n'est pas résolu. Cependant, les applications autonomes peuvent déjà être implémentées avec plusieurs projets et le code du serveur QGIS est également déplacé dans cette direction. À long terme, QgsProject.instance () peut disparaître complètement.
Matthias Kuhn
Je ne comprends pas comment le passage de l'utilisation d'un singleton sur une partie à un singleton sur une autre partie modifie la capacité à exécuter plusieurs instances (qui reçoivent de toute façon la même instance singleton (par définition) ... ne serait-il pas plus logique d'avoir un application singleton qui exécute des instances? cela permettrait également une interopérabilité et une extensibilité beaucoup plus faciles (un peu comme un sdk de bureau Microsoft où vous pouvez vous connecter à une instance de bureau ouverte existante ou ouvrir une nouvelle instance
Mickey Perlstein