Tôi cũng nhận được một từ điển trống khi tôi chạy mã của bạn nhưng các công việc sau đây đối với tôi hơi khác:
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()
Đã thử nghiệm trên QGIS 2.18.3 cho Windows 7 64 bit.
Biên tập:
Sự khác biệt chính, tôi tin rằng, giữa mã của bạn và những gì tôi đã sử dụng là bạn cần tạo đối tượng QApplication trước khi tạo QSSApplication. Vì vậy, bạn sẽ cần phải thay thế:
qgs = QgsApplication([], False)
Với cái này:
qgs = QApplication([], False)
Nhưng lớp QApplication cần phải được nhập vì vậy chúng ta phải thêm vào như sau:
from PyQt4.QtGui import QApplication
Và cuối cùng, nếu bạn muốn dọn dẹp, bạn cần thêm phần sau vào cuối.
QgsApplication.exitQgis()
Vì vậy, bạn có thể thử sử dụng mã sau gần với mã gốc của mình hơn:
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
các bước đã thử của OP và @ GermánCarrillo. Phiên bản OP là gì?