Я також отримую порожній словник, коли запускаю ваш код, але для мене це працює трохи інше:
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()
Тестовано на QGIS 2.18.3 для Windows 7 64-розрядні.
Редагувати:
Я вважаю, що головна відмінність між вашим кодом і тим, що я використав, полягає в тому, що вам потрібно створити об'єкт QApplication перед створенням QgsApplication. Тому вам потрібно буде замінити:
qgs = QgsApplication([], False)
з цим:
qgs = QApplication([], False)
Але клас QApplication потрібно імпортувати, тому ми мусимо додати наступне:
from PyQt4.QtGui import QApplication
І нарешті, якщо ви хочете зробити очищення, вам потрібно додати наступне в кінці.
QgsApplication.exitQgis()
Тож ви можете спробувати скористатися наступним кодом, який ближче до початкового коду:
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
перепробуваних кроках ОП та @ GermánCarrillo. Яка версія OP?