QssMapLayerRegistry có bị xóa trong QGIS3 không?


19

Sẽ QgsMapLayerRegistrycó sẵn trong pyqgis với QGIS3

Khi tôi gõ nó vào bảng điều khiển python của QGIS (2.99), python dường như nhận ra nó vì nó tự động hoàn thành qgis.core.QgsMapLayerRegistry, nhưng sau đó đưa ra một lỗi mà nó không có ở đó:

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'

Tôi đã thử điều này với hai phiên bản của QGIS 2.99 (một vào ngày 01/07 và vào ngày 17 tháng 6). Cả hai phiên bản đều cho cùng một lỗi. importcũng không hoạt động:

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

Được QgsMapLayerRegistryxóa trong QGIS3?

Câu trả lời:


26

Vâng, nó đã được gỡ bỏ, nhưng sự thay thế tồn tại.

Các thay đổi của API 3.0 được liệt kê ở đây:

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

QgsMapLayerRegistry: Chức năng của nó đã được chuyển đến QgsProject.

Lý do chính là, QssMapLayerRegistry là / là một singleton và do đó chỉ có một sổ đăng ký duy nhất có thể tồn tại. Với sự hạn chế này được loại bỏ, các rào cản lớn không nằm trong cách thực hiện những điều mới như có nhiều dự án mở song song.


Tôi nghĩ rằng câu trả lời vẫn chưa đầy đủ.
Abhijit Gujar

2
Tôi nghĩ bạn cần cung cấp thêm thông tin tại sao bạn nghĩ rằng câu trả lời vẫn chưa đầy đủ.
Matthias Kuhn

nếu bạn sử dụng QssProject.instance () làm thế nào để giải quyết vấn đề đơn lẻ?
Mickey Perlstein

@MickeyPerlstein bạn đã đúng, nếu bạn sử dụng QssProject.instance () thì không giải quyết được. Tuy nhiên, giờ đây các ứng dụng độc lập có thể được triển khai với nhiều dự án và mã máy chủ QGIS cũng được di chuyển theo hướng này. Về lâu dài, QssProject.instance () có thể biến mất hoàn toàn.
Matthias Kuhn

tôi không hiểu việc chuyển từ sử dụng singleton trên một phần sang singleton trên một phần khác làm thay đổi khả năng chạy nhiều trường hợp (dù sao cũng nhận được cùng một thể hiện singleton (theo định nghĩa) ... sẽ không có ý nghĩa hơn khi có một Ứng dụng singleton có chạy phiên bản? Điều này cũng sẽ cho phép khả năng tương tác và mở rộng dễ dàng hơn nhiều (giống như sdk văn phòng microsoft nơi bạn có thể kết nối với một phiên bản mở hiện tại của văn phòng hoặc mở một phiên bản mới
Mickey Perlstein

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.