QgsMapLayerRegistry ถูกลบใน QGIS3 หรือไม่


20

เป็นQgsMapLayerRegistryไปได้ไม่มีที่ใน 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

ใช่ถูกลบแล้ว แต่มีทางเลือกอื่นอยู่

การเปลี่ยนแปลงของ 3.0 API อยู่ที่นี่:

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

QgsMapLayerRegistry: การทำงานของมันได้ถูกย้ายไปQgsProject

เหตุผลหลักคือ QgsMapLayerRegistry คือ / เป็นซิงเกิลตันและดังนั้นจึงมีเพียงสตรีเดียวที่เคยมีอยู่ เมื่อนำข้อ จำกัด นี้ออกไปสิ่งกีดขวางบนถนนหลักนั้นไม่สามารถนำสิ่งใหม่ ๆ มาใช้ได้เช่นเปิดโครงการหลายโครงการแบบเคียงข้างกัน


ฉันคิดว่าคำตอบยังไม่สมบูรณ์
Abhijit Gujar

2
ฉันคิดว่าคุณต้องให้ข้อมูลเพิ่มเติมว่าทำไมคุณคิดว่าคำตอบนั้นยังไม่สมบูรณ์
Matthias Kuhn

ถ้าคุณใช้ QgsProject.instance () วิธีนี้แก้ปัญหาเรื่องซิงเกิลได้อย่างไร?
มิกกี้ Perlstein

@ MickeyPerlstein คุณพูดถูกถ้าคุณใช้ QgsProject.instance () มันไม่ได้รับการแก้ไข อย่างไรก็ตามแอปพลิเคชันแบบสแตนด์อโลนสามารถนำไปใช้กับหลายโครงการได้แล้วและรหัสเซิร์ฟเวอร์ QGIS ก็ถูกย้ายไปในทิศทางนี้เช่นกัน ในระยะยาว QgsProject.instance () อาจหายไปโดยสิ้นเชิง
Matthias Kuhn

ฉันไม่เข้าใจว่าการย้ายจากการใช้ซิงเกิลตันในส่วนหนึ่งไปเป็นซิงเกิลตันในอีกส่วนหนึ่งจะเปลี่ยนความสามารถในการเรียกใช้หลายอินสแตนซ์ได้อย่างไร (ซึ่งได้รับอินสแตนซ์ซิงเกิลเดียวกัน ? แอปเดี่ยวที่ได้รับการเรียกใช้กรณีนี้ยังจะช่วยให้ interopability ง่ายมากและ extensibilty (ชนิดเช่น SDK ของ Microsoft Office ที่คุณสามารถเชื่อมต่อกับอินสแตนซ์เปิดที่มีอยู่ของสำนักงานหรือเปิดตัวอย่างใหม่
มิกกี้ Perlstein

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.