Saya juga menerima kamus kosong ketika saya menjalankan kode Anda tetapi yang berikut ini berfungsi untuk saya yang sedikit berbeda:
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()
Diuji pada QGIS 2.18.3 untuk Windows 7 64-bit.
Edit:
Perbedaan utama, saya percaya, antara kode Anda dan apa yang saya gunakan adalah bahwa Anda perlu membuat objek QApplication sebelum membuat QgsApplication. Jadi, Anda perlu mengganti:
qgs = QgsApplication([], False)
dengan ini:
qgs = QApplication([], False)
Tetapi kelas QApplication perlu diimpor sehingga kami harus menambahkan yang berikut:
from PyQt4.QtGui import QApplication
Dan akhirnya, jika Anda ingin melakukan pembersihan, Anda perlu menambahkan yang berikut di akhir.
QgsApplication.exitQgis()
Jadi Anda dapat mencoba menggunakan kode berikut yang lebih dekat dengan kode asli Anda:
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
langkah mencoba OP dan @ GermánCarrillo. Apa versi OP?