processing.getObject () in QGIS 3


9

Sembra che processing.getObject()non sia più disponibile in QGIS.

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

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

C'è un nuovo modo di usare get.Object?


Il metodo 'processing.getObject ()' è ancora disponibile in QGIS.
xunilk,

1
Non eseguire ancora il port su qgis 3: l'API non è stata bloccata, quindi al momento del rilascio eseguirai un lavoro extra! Se vuoi farti lavorare da solo, la guida al porting per l'elaborazione dei lavori in corso è su github.com/qgis/QGIS/pull/4841/files
ndawson

Risposte:


4

Ho una copia del progetto github di QGIS localmente, ha qualche mese ma sono riuscito a trovare dove è cambiato.

Vale la pena controllare l'elenco delle modifiche all'API , che menziona questo

dataobjects.getLayerFromString () è stato rimosso. Utilizzare invece QgsProcessingUtils.mapLayerFromString ().

Usando le annotazioni git line sono stato in grado di risalire a una modifica apportata alcuni mesi fa ...

sembra che alcuni metodi (incluso getObject ) siano stati rifattorizzati e sostituiti con un singolo metodo 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.
    """
    ...

Ma da allora è stato spostato in QgsProcessingUtils .

Quindi potresti provare a usare QgsProcessingUtils.mapLayerFromString()

Se si utilizza QGIS 2.x, si dovrebbe comunque essere in grado di utilizzare getObject () come prima (è possibile verificarne l'utilizzo print(processing.__dict__['getObject'])


0

Il metodo 'processing.getObject ()' è ancora disponibile in QGIS. Si può osservare all'immagine netta:

inserisci qui la descrizione dell'immagine

Quindi, la soluzione è la seguente:

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

1
processing.getObject () non è disponibile nell'attuale master, che sarà QGIS v3.0 tra mesi.
Germán Carrillo,

stavo per etichettare questa domanda qgis-3.0 ma ho notato che non esiste un tag per questo. Per interesse quale plugin stavi usando lì?
Steven Kay,

@StevenKay, c'è, l'ho appena taggato.
Germán Carrillo,

@ GermánCarrillo Lo so. Scusa, ma non ho visto il numero 3 perché mi concentro sul fatto che ha usato nella sua domanda un riferimento di livello invece di un parametro come parametro (possibile causa dell'errore).
xunilk,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.