Apakah QgsMapLayerRegistry dihapus di QGIS3?


20

Apakah QgsMapLayerRegistryakan availabe di pyqgis dengan QGIS3

Ketika saya mengetikkannya ke konsol python QGIS (2.99), python sepertinya mengenalinya karena secara otomatis selesai qgis.core.QgsMapLayerRegistry, tetapi kemudian memberikan kesalahan bahwa itu tidak ada di sana:

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'

Saya mencoba ini dengan dua versi QGIS 2.99 (satu di 01/07 dan di 06/17). Kedua versi memberikan kesalahan yang sama. importjuga tidak bekerja:

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

Apakah QgsMapLayerRegistrydihapus di QGIS3?

Jawaban:


27

Ya itu telah dihapus, tetapi ada alternatif.

Perubahan API 3.0 tercantum di sini:

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

QgsMapLayerRegistry: Fungsinya telah dipindahkan ke QgsProject.

Alasan utamanya adalah, bahwa QgsMapLayerRegistry adalah / adalah singleton dan oleh karena itu hanya satu registry yang bisa ada. Dengan dihilangkannya kendala ini, penghalang jalan utama tidak memungkinkan untuk mengimplementasikan hal-hal baru seperti membuka banyak proyek secara berdampingan.


Saya pikir jawabannya masih belum lengkap.
Abhijit Gujar

2
Saya pikir Anda perlu memberikan lebih banyak informasi mengapa menurut Anda jawabannya masih belum lengkap.
Matthias Kuhn

jika Anda menggunakan QgsProject.instance () bagaimana cara mengatasi masalah singleton?
Mickey Perlstein

@MickeyPerlstein Anda benar, jika Anda menggunakan QgsProject.instance () itu tidak terpecahkan. Namun, aplikasi mandiri sekarang sudah dapat diimplementasikan dengan beberapa proyek dan kode server QGIS juga dipindahkan ke arah ini. Dalam jangka panjang, QgsProject.instance () mungkin benar-benar hilang.
Matthias Kuhn

saya tidak mengerti bagaimana beralih dari menggunakan singleton pada satu bagian ke singleton pada bagian lain mengubah kemampuan untuk menjalankan beberapa instance (yang tetap menerima instance singleton yang sama (menurut definisi) ... tidakkah lebih masuk akal untuk memiliki aplikasi tunggal yang menjalankan instance? ini juga akan memungkinkan interopabilitas dan ekstensibilty yang jauh lebih mudah (jenis seperti microsoft office SDK di mana Anda dapat terhubung ke instance kantor yang ada atau membuka instance baru
Mickey Perlstein

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.