Próbuję załadować istniejący projekt .qgs i uzyskać listę warstw w środku. Wygląda na to, że mogę otworzyć projekt, ale nie mogę uzyskać listy warstw. Jestem trochę zdezorientowany co do podstawowej składni PyQGIS, a książka kucharska nie obejmuje tego konkretnego przykładu.
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()
Obecnie layers
zwraca to tylko pusty dyktand, mimo że projekt istnieje i zawiera wiele warstw.
QGIS 2.18.2
wypróbowanych krokach OP i @ GermánCarrillo. Jaka jest wersja OP?QgsApplication.processEvents()
zaraz poproject.read
?Odpowiedzi:
Po uruchomieniu kodu otrzymuję również pusty słownik, ale dla mnie działa to nieco inaczej:
Testowany na QGIS 2.18.3 dla Windows 7 64-bit.
Edytować:
Uważam, że główną różnicą między twoim kodem a tym, czego użyłem, jest to, że musisz utworzyć obiekt QApplication przed utworzeniem aplikacji QgsApplication. Musisz więc wymienić:
z tym:
Ale klasa QApplication musi zostać zaimportowana, dlatego musimy dodać:
I na koniec, jeśli chcesz zrobić porządki, musisz dodać następujące na końcu.
Możesz więc spróbować użyć następującego kodu, który jest bardziej zbliżony do oryginalnego kodu:
źródło