У меня проблемы с выяснением, как перебирать слои карты. Я могу получить доступ к текущему выделенному слою в оглавлении через, iface.activeLayer()
но я хочу, чтобы мой код работал на всех слоях.
Я не вижу в API ничего такого, что обеспечивало бы легкий доступ к этой функциональности и не смог найти хорошего онлайн-примера, но, может быть, я что-то упустил?
Ответы:
Пытаться...
Собран из файла consolidatethread.py из плагина QConsolidate .
Описание объекта QgsLegendInterface, возвращенного из legendInterface ().
Редактировать : добавлена информация о себе.
источник
Есть также два других способа:
даст вам список слоев
или
источник
2.16
и вышеДля QGIS 2.6 вот код для идентификации каждого уровня и группировки их:
Примечание: после группировки я должен удалить дубликат слоя, чтобы я использовал
root.removeLayer(lyr)
.источник
Для QGIS 3
QgsMapLayerRegistry
функциональность была перенесена вQgsProject
.Итак, для перебора слоев карты вы должны использовать эту структуру:
.mapLayers()
возвращает словарь, структурированный как{layer_x_id: layer_x, layer_y_id: layer_y, ....}
. Затем вы можете перебирать слои, например:Поскольку
.mapLayers()
возвращает словарь (dict
), вы также можете использовать.values()
метод словаря, который возвращает только тот,list
который содержит слои в этом случае. Затем вы можете перебирать слои, например:Если вы предпочитаете, вы можете выполнить итерацию следующим образом:
источник
for layer in layers: print(layer)
Вы можете использовать скрипт для печати ключей. Или просто использоватьprint(layers.keys())
безfor
петли.