我購買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