Я пытаюсь загрузить существующий проект .qgs и получить список слоев внутри. Кажется, я могу открыть проект, но не могу получить список слоев. Я немного сбит с толку относительно основного синтаксиса PyQGIS, и поваренная книга не охватывает этот конкретный пример.
from qgis.core import *
from PyQt4.QtCore import QFileInfo
QgsApplication.setPrefixPath(r"C:\OSGeo4W\apps\qgis-ltr", True)
qgs = QgsApplication([], False)
qgs.initQgis()
# Get the project instance
project = QgsProject.instance()
# Open the project
project.read(QFileInfo(
r'C:\path\to\project\project.qgs'))
print project.fileName()
# Get the layers in the project
layers = QgsMapLayerRegistry.instance().mapLayers()
print layers
qgs.exitQgis()
В настоящее время это просто layers
возвращает пустой диктат, несмотря на то, что проект существует и имеет много слоев.
QGIS 2.18.2
пробных шагах OP и @ GermánCarrillo. Какая версия ОП?QgsApplication.processEvents()
сразу послеproject.read
?Ответы:
Я также получаю пустой словарь, когда запускаю ваш код, но у меня работает следующее, немного отличающееся:
Протестировано на QGIS 2.18.3 для Windows 7 64-bit.
Редактировать:
Я полагаю, что основное различие между вашим кодом и тем, что я использовал, заключается в том, что вам нужно создать объект QApplication перед созданием QgsApplication. Так что вам нужно заменить:
с этим:
Но класс QApplication необходимо импортировать, поэтому мы должны добавить следующее:
И, наконец, если вы хотите выполнить очистку, вам нужно добавить следующее в конце.
Таким образом, вы можете попробовать использовать следующий код, который ближе к вашему исходному коду:
источник