QGIS 3中的processing.getObject()


9

似乎processing.getObject()在QGIS中不再可用。

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

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

有没有新的使用方法get.Object


方法“ processing.getObject()”在QGIS中仍然可用。
xunilk

1
暂时不要移植到qgis 3-API尚未冻结,因此发布版本后,您将自己做更多工作!如果您想自己做点工作,则正在进行的工作处理移植指南位于github.com/qgis/QGIS/pull/4841/files
ndawson '17

Answers:


4

我在本地有一个QGIS github项目的副本,虽然已有几个月的历史,但我能够找到它的变化之处。

值得检查一下API更改列表,其中提到了这一点

dataobjects.getLayerFromString()已删除。请改用QgsProcessingUtils.mapLayerFromString()。

使用git line批注,我可以追溯到几个月前所做的更改 ...

看起来好像重构了一些方法(包括getObject),并用单个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.
    """
    ...

自那时以来它已经移动QgsProcessingUtils

所以你可以尝试使用 QgsProcessingUtils.mapLayerFromString()

如果使用QGIS 2.x,您仍应该能够像以前一样使用getObject()(可以使用 print(processing.__dict__['getObject'])


0

方法“ processing.getObject()”在QGIS中仍然可用。可以在网络图像上观察到:

在此处输入图片说明

因此,解决方法如下:

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

1
processing.getObject()在当前的母版中不可用,它将在几个月内成为QGIS v3.0。
赫尔曼·卡里略

我本来要标记这个问题qgis-3.0,但注意到没有这个标签。出于兴趣,您在那里使用了什么插件?
史蒂文·凯

@StevenKay,有,只是标记了它。
赫尔曼·卡里略

@GermánCarrillo我知道。抱歉,但我没有看到数字3,因为我专注于他在问题中使用了层引用而不是uri作为参数(可能是错误原因)。
xunilk
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.