processing.getObject () dans QGIS 3

9

Il semble que ce processing.getObject()ne soit plus disponible dans QGIS.

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

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

Existe-t-il une nouvelle façon d'utiliser get.Object?

Mer lunaire
la source
La méthode 'processing.getObject ()' est toujours disponible dans QGIS.
xunilk
1
Ne portez pas encore sur qgis 3 - l'API n'a pas gelé, vous ferez donc du travail supplémentaire pour vous-même lorsque la version sera faite! Si vous souhaitez créer du travail pour vous-même, le guide de portage du traitement des travaux en cours se trouve sur github.com/qgis/QGIS/pull/4841/files
ndawson

Réponses:

4

J'ai une copie du projet github QGIS localement, il y a quelques mois mais j'ai pu trouver où cela a changé.

Cela vaut la peine de vérifier la liste des modifications de l'API , qui mentionne ceci

dataobjects.getLayerFromString () a été supprimé. Utilisez plutôt QgsProcessingUtils.mapLayerFromString ().

En utilisant des annotations de ligne git, j'ai pu retracer cela à un changement effectué il y a quelques mois ...

il semble que quelques méthodes (y compris getObject ) aient été refactorisées et remplacées par une seule méthode 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.
    """
    ...

Mais depuis lors, il a été déplacé vers QgsProcessingUtils .

Vous pouvez donc essayer d'utiliser QgsProcessingUtils.mapLayerFromString()

Si vous utilisez QGIS 2.x, vous devriez toujours pouvoir utiliser getObject () comme auparavant (vous pouvez vérifier en utilisant print(processing.__dict__['getObject'])

Steven Kay
la source
0

La méthode 'processing.getObject ()' est toujours disponible dans QGIS. Il peut être observé à l'image nette:

entrez la description de l'image ici

Ainsi, la solution de contournement est la suivante:

>>>import processing
>>>layer =  processing.getObject("/home/zeito/pyqgis_data/polygon8.shp")
>>>layer
<qgis._core.QgsVectorLayer object at 0x9a9c0104>
xunilk
la source
1
processing.getObject () n'est pas disponible dans le maître actuel, qui sera QGIS v3.0 dans les mois.
Germán Carrillo
j'allais marquer cette question qgis-3.0 mais j'ai remarqué qu'il n'y a pas de balise pour cela. Par intérêt quel plugin utilisiez-vous là-bas?
Steven Kay
@StevenKay, il y a, vient de le taguer.
Germán Carrillo
@ GermánCarrillo Je le sais. Désolé, mais je n'ai pas vu le numéro 3 parce que je me concentre en ce qu'il a utilisé dans sa question une référence de couche à la place un uri comme paramètre (cause possible d'erreur).
xunilk