我购买this book called Building Mapping Applications with QGIS,我正在尝试通过其中一个练习。有一个脚本,我尝试运行,崩溃python,生成错误消息“python.exe已停止工作”。Python脚本与QGis - Python.exe停止工作
import sys
import os
from qgis.core import *
from qgis.gui import *
from PyQt4.QtGui import *
from PyQt4.QtCore import Qt
#############################################################################
class MapViewer(QMainWindow):
def __init__(self, shapefile):
QMainWindow.__init__(self)
self.setWindowTitle("Map Viewer")
canvas = QgsMapCanvas()
canvas.useImageToRender(False)
canvas.setCanvasColor(Qt.white)
canvas.show()
layer = QgsVectorLayer(shapefile, "layer1", "ogr")
if not layer.isValid():
raise IOError("Invalid shapefile")
QgsMapLayerRegistry.instance().addMapLayer(layer)
canvas.setExtent(layer.extent())
canvas.setLayerSet([QgsMapCanvasLayer(layer)])
layout = QVBoxLayout()
layout.addWidget(canvas)
contents = QWidget()
contents.setLayout(layout)
self.setCentralWidget(contents)
#############################################################################
def main():
""" Our main program.
"""
QgsApplication.setPrefixPath(os.environ['QGIS_PREFIX'], True)
QgsApplication.initQgis()
app = QApplication(sys.argv)
viewer = MapViewer("C:/folder/shapefile.shp")
viewer.show()
app.exec_()
QgsApplication.exitQgis()
#############################################################################
if __name__ == "__main__":
main()
我不知道Python与QGIS有很多关系,所以我不太确定是什么导致python崩溃。我确信所有模块都能正确导入,因为如果我定义了路径,然后使用OSGeo4W Shell在脚本中导入模块,则没有错误消息。
这是怎么我的路径定义:
SET OSGEO4W_ROOT=C:\OSGeo4W64
SET QGIS_PREFIX=%OSGEO4W_ROOT%\apps\qgis
SET PATH=%PATH%;%QGIS_PREFIX%\bin
SET PYTHONPATH=%QGIS_PREFIX%\python;%PYTHONPATH%
鉴于这一切,我认为必须有一些错误的脚本。但是,当我使用http://pep8online.com/检查脚本时,没有可以修复的错误,这会导致python不会崩溃。
请注意,我试过我已经试过SET PATH=%QGIS_PREFIX%\bin;%PATH%
而不是SET PATH=%PATH%;%QGIS_PREFIX%\bin
没有成功。
就像一个参考文献,我没有写这个脚本,它是本应该工作而不做任何改变的直接副本。听起来好像我需要对脚本进行多种修改才能解决这些问题。我刺了一刀,但我似乎没有得到任何地方。如果你有任何其他的指导意见,我会很感激。或者,如果你准备好了,我会很乐意尝试你的脚本的修改版本! – ge0m3try