process.getObject () in QGIS 3

9

Es scheint, dass dies processing.getObject()in QGIS nicht mehr verfügbar ist.

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

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

Gibt es eine neue Art der Verwendung get.Object?

Mondsee
quelle
Die Methode 'process.getObject ()' ist in QGIS weiterhin verfügbar.
Xunilk
1
Portieren Sie noch nicht auf qgis 3 - die API ist noch nicht eingefroren, sodass Sie bei der Veröffentlichung zusätzliche Arbeit für sich selbst leisten müssen! Wenn Sie selbst arbeiten möchten, finden Sie den Portierungsleitfaden für die laufende Verarbeitung unter github.com/qgis/QGIS/pull/4841/files
ndawson,

Antworten:

4

Ich habe eine Kopie des QGIS-Github-Projekts vor Ort, es ist ein paar Monate alt, aber ich konnte herausfinden, wo sich dies geändert hat.

Es lohnt sich, die Liste der API-Änderungen zu überprüfen , in der dies erwähnt wird

dataobjects.getLayerFromString () wurde entfernt. Verwenden Sie stattdessen QgsProcessingUtils.mapLayerFromString ().

Mit Hilfe von Git-Line-Annotationen konnte ich dies auf eine Änderung zurückführen, die vor einigen Monaten vorgenommen wurde ...

Es sieht so aus, als ob einige Methoden (einschließlich getObject ) überarbeitet und durch eine einzige getLayerFromString () -Methode ersetzt wurden

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.
    """
    ...

Aber seitdem wurde es nach QgsProcessingUtils verschoben .

Sie könnten es also versuchen QgsProcessingUtils.mapLayerFromString()

Wenn Sie QGIS 2.x verwenden, sollten Sie getObject () weiterhin wie zuvor verwenden können (dies kann überprüft werden print(processing.__dict__['getObject'])

Steven Kay
quelle
0

Die Methode 'process.getObject ()' ist in QGIS weiterhin verfügbar. Es kann am Netzbild beobachtet werden:

Geben Sie hier die Bildbeschreibung ein

Die Problemumgehung lautet also wie folgt:

>>>import processing
>>>layer =  processing.getObject("/home/zeito/pyqgis_data/polygon8.shp")
>>>layer
<qgis._core.QgsVectorLayer object at 0x9a9c0104>
xunilk
quelle
1
process.getObject () ist im aktuellen Master nicht verfügbar, der in Monaten QGIS v3.0 sein wird.
Germán Carrillo
Ich wollte diese Frage mit qgis-3.0 markieren, habe aber festgestellt, dass es dafür kein Tag gibt. Aus Interesse, welches Plugin haben Sie dort verwendet?
Steven Kay
@StevenKay gibt es, nur markiert es.
Germán Carrillo
@ GermánCarrillo das weiß ich. Entschuldigung, aber ich habe Nummer 3 nicht gesehen, weil ich mich darauf konzentriere, dass er in seiner Frage eine Ebenenreferenz anstelle eines uri als Parameter verwendet hat (mögliche Fehlerursache).
Xunilk