QGIS3'te QgsMapLayerRegistry kaldırıldı mı?


21

Is QgsMapLayerRegistryQGIS3 ile pyqgis içinde availabe olacak

QGIS python konsoluna (2.99) yazdığımda, python otomatik olarak tamamlandığından tanıyor gibi görünüyor qgis.core.QgsMapLayerRegistry, ancak orada olmadığı bir hata veriyor:

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'

Bunu QGIS 2.99'un iki sürümü ile denedim (01/07'de ve 06/17'de bir). Her iki sürüm de aynı hatayı verir. importda çalışmıyor:

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

QgsMapLayerRegistryQGIS3'te kaldırıldı mı ?

Yanıtlar:


27

Evet kaldırıldı, ancak alternatifler var.

3.0 API'sındaki değişiklikler burada listelenmiştir:

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

QgsMapLayerRegistry: İşlevine taşındı QgsProject.

Bunun temel nedeni, QgsMapLayerRegistry'in tekil olması ve bu nedenle yalnızca tek bir kayıt defterinin bulunabilmesidir. Bu kısıtlama kaldırıldığında, büyük barikatlar, birden fazla projenin yan yana açılması gibi yeni şeyleri uygulamak için yoldan çıkmaktadır.


bence cevap hala eksik.
Abhijit Gujar

2
Cevabın neden hala eksik olduğunu düşündüğünüz hakkında daha fazla bilgi vermeniz gerektiğini düşünüyorum.
Matthias Kuhn

QgsProject.instance () kullanırsanız, singleton sorunu nasıl çözülür?
Mickey Perlstein

@MickeyPerlstein haklısınız, eğer QgsProject.instance () kullanırsanız bu çözülmüş değil. Ancak, bağımsız uygulamalar artık birden çok projeyle uygulanabilir ve QGIS sunucu kodu da bu yönde taşınır. Uzun vadede QgsProject.instance olarak () olabilir tamamen kaybolur.
Matthias Kuhn

nasıl bir parça üzerinde bir singleton kullanmaktan başka bir parça üzerinde bir singleton hareket nasıl anlıyoruz (yine de aynı singleton örneği (tanım gereği) almak yeteneği ... bir anlam daha anlamlı olmaz ? örneklerini çalıştıran alır tekil uygulama, bu da yeni bir örneğini ofis varolan açık örneğine bağlanmak veya açabilirsiniz çok daha kolay interopability ve nazik microsoft office sdk benzeri extensibilty (izin verecek
Mickey Perlstein

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.