processing.getObject () в QGIS 3

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

Ответы:

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>
xunilk
источник
1
processing.getObject () недоступен в текущем мастере, который будет QGIS v3.0 в месяцах.
Герман Каррильо
я собирался отметить этот вопрос qgis-3.0, но заметил, что для этого нет тега. Из интереса, какой плагин вы использовали там?
Стивен Кей,
@ StevenKay, есть, просто отметил это.
Герман Каррильо
@ GermánCarrillo Я это знаю. Извините, но я не увидел номер 3, потому что я сосредоточился на том, что он использовал в своем вопросе ссылку на слой вместо uri в качестве параметра (возможная причина ошибки).
xunilk