Po uruchomieniu kodu otrzymuję również pusty słownik, ale dla mnie działa to nieco inaczej:
from qgis.core import *
from PyQt4.QtCore import QFileInfo
from PyQt4.QtGui import QApplication
import os
from os.path import expanduser
home = expanduser("~")
QgsApplication( [], False, home + "/AppData/Local/Temp" )
QgsApplication.setPrefixPath("C:/OSGeo4W64/apps/qgis", True)
app = QApplication([], True)
QgsApplication.initQgis()
# Get the project instance
project = QgsProject.instance()
# Open the project
project.read(QFileInfo('C:\path\to\project\project.qgs'))
print project.fileName()
# Get the layers in the project
layers = QgsMapLayerRegistry.instance().mapLayers()
print layers
QgsApplication.exitQgis()
app.exit()
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ć:
qgs = QgsApplication([], False)
z tym:
qgs = QApplication([], False)
Ale klasa QApplication musi zostać zaimportowana, dlatego musimy dodać:
from PyQt4.QtGui import QApplication
I na koniec, jeśli chcesz zrobić porządki, musisz dodać następujące na końcu.
QgsApplication.exitQgis()
Możesz więc spróbować użyć następującego kodu, który jest bardziej zbliżony do oryginalnego kodu:
from qgis.core import *
from PyQt4.QtCore import QFileInfo
from PyQt4.QtGui import QApplication
QgsApplication.setPrefixPath("C:/OSGeo4W64/apps/qgis", True)
qgs = QApplication([], False)
QgsApplication.initQgis()
# Get the project instance
project = QgsProject.instance()
# Open the project
project.read(QFileInfo('C:/path/to/project/project.qgs'))
print project.fileName()
# Get the layers in the project
layers = QgsMapLayerRegistry.instance().mapLayers()
print layers
QgsApplication.exitQgis()
QGIS 2.18.2
wypróbowanych krokach OP i @ GermánCarrillo. Jaka jest wersja OP?