process.getObject () trong QGIS 3


9

Có vẻ như nó processing.getObject()không còn có sẵn trong QGIS.

from PyQt5.QtCore import *
from qgis.core import *
#...
layer = processing.getObject(layer)

# -> ...module 'processing' has no attribute 'getObject'

Có một cách mới để sử dụng get.Object?


Phương thức 'process.getObject ()' vẫn có sẵn trong QGIS.
xunilk

1
Chưa chuyển sang qgis 3 - API chưa bị đóng băng, vì vậy bạn sẽ tự làm thêm khi phát hành! Nếu bạn muốn tự mình tạo ra công việc, công việc trong hướng dẫn xử lý chuyển tiếp tiến trình có tại github.com/qgis/QGIS/pull/4841/files
ndawson

Câu trả lời:


4

Tôi có một bản sao của dự án github của QGIS tại địa phương, nó đã được vài tháng nhưng tôi đã có thể tìm thấy nơi này đã thay đổi.

Thật đáng để kiểm tra danh sách các thay đổi API , trong đó đề cập đến điều này

dataobjects.getLayerFromString () đã bị xóa. Thay vào đó, hãy sử dụng QssProcessingUtils.mapLayerFromString ().

Sử dụng chú thích dòng git, tôi có thể theo dõi sự thay đổi này được thực hiện vài tháng trước ...

có vẻ như một vài phương thức (bao gồm getObject ) đã được cấu trúc lại và thay thế bằng một phương thức getLayerFromString ()

def getLayerFromString(string, forceLoad=True):
    """Returns an object (layer/table) given a source definition.

    if forceLoad is true, it tries to load it if it is not currently open
    Otherwise, it will return the object only if it is loaded in QGIS.
    """
    ...

Nhưng kể từ đó, nó đã được chuyển sang QssProcessingUtils .

Vì vậy, bạn có thể thử sử dụng QgsProcessingUtils.mapLayerFromString()

Nếu sử dụng QGIS 2.x, bạn vẫn có thể sử dụng getObject () như trước đây (có thể kiểm tra bằng cách sử dụng print(processing.__dict__['getObject'])


0

Phương thức 'process.getObject ()' vẫn có sẵn trong QGIS. Nó có thể được quan sát tại hình ảnh mạng:

nhập mô tả hình ảnh ở đây

Vì vậy, cách giải quyết như sau:

>>>import processing
>>>layer =  processing.getObject("/home/zeito/pyqgis_data/polygon8.shp")
>>>layer
<qgis._core.QgsVectorLayer object at 0x9a9c0104>

1
process.getObject () không có sẵn trong bản gốc hiện tại, nó sẽ là QGIS v3.0 sau vài tháng.
Germán Carrillo

tôi sẽ gắn thẻ câu hỏi này qgis-3.0 nhưng nhận thấy không có thẻ nào cho câu hỏi này. Bạn có thích sử dụng plugin nào không?
Steven Kay

@StevenKay, có, chỉ cần gắn thẻ nó.
Germán Carrillo

@ GermánCarrillo Tôi biết điều đó. Xin lỗi, nhưng tôi đã không thấy số 3 vì tôi tập trung vào việc anh ấy đã sử dụng trong câu hỏi của mình một tham chiếu lớp thay vì uri làm tham số (nguyên nhân có thể gây ra lỗi).
xunilk
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.