Ich versuche, ein vorhandenes .qgs-Projekt zu laden und eine Liste der darin enthaltenen Ebenen abzurufen. Ich scheine in der Lage zu sein, das Projekt zu öffnen, aber ich kann die Liste der Ebenen nicht erhalten. Ich bin etwas verwirrt über die grundlegende PyQGIS-Syntax, und das Kochbuch behandelt dieses spezielle Beispiel nicht.
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()
Derzeit wird nur layers
ein leeres Diktat zurückgegeben, obwohl das Projekt vorhanden ist und viele Ebenen enthält.
QGIS 2.18.2
erprobten Schritten von OP und @ GermánCarrillo. Was ist die OP-Version?QgsApplication.processEvents()
gleich danach einzufügenproject.read
?Antworten:
Ich erhalte auch ein leeres Wörterbuch, wenn ich Ihren Code ausführe, aber das Folgende funktioniert für mich, was etwas anders ist:
Getestet unter QGIS 2.18.3 für Windows 7 64-Bit.
Bearbeiten:
Ich glaube, der Hauptunterschied zwischen Ihrem Code und dem, was ich verwendet habe, besteht darin, dass Sie das QApplication-Objekt erstellen müssen, bevor Sie die QgsApplication erstellen. Sie müssten also Folgendes ersetzen:
mit diesem:
Die QApplication-Klasse muss jedoch importiert werden, sodass Folgendes hinzugefügt werden muss:
Wenn Sie eine Bereinigung durchführen möchten, müssen Sie am Ende Folgendes hinzufügen.
Sie können also versuchen, den folgenden Code zu verwenden, der Ihrem ursprünglichen Code näher kommt:
quelle