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>

1
processing.getObject () недоступен в текущем мастере, который будет QGIS v3.0 в месяцах.
Герман Каррильо

я собирался отметить этот вопрос qgis-3.0, но заметил, что для этого нет тега. Из интереса, какой плагин вы использовали там?
Стивен Кей,

@ StevenKay, есть, просто отметил это.
Герман Каррильо

@ GermánCarrillo Я это знаю. Извините, но я не увидел номер 3, потому что я сосредоточился на том, что он использовал в своем вопросе ссылку на слой вместо uri в качестве параметра (возможная причина ошибки).
xunilk
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.