this book called Building Mapping Applications with QGISを購入しましたが、練習問題の1つを試してみようとしています。 Pythonをクラッシュさせて実行しようとするスクリプトがあり、 "python.exeが動作を停止しました"というエラーメッセージが表示されます。QGisのPythonスクリプト - 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シェルを使用してスクリプト内のモジュールをインポートすると、エラーメッセージが表示されないため、すべてのモジュールが正しくインポートされているということは肯定的です。
は、これは私のパスが定義されている方法です。このすべてを考えると
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=%PATH%;%QGIS_PREFIX%\bin
の代わりにSET PATH=%QGIS_PREFIX%\bin;%PATH%
を試したことに注意してください。
FYIと同じように、私はこのスクリプトを書いていませんでした。これは、変更せずに動作するはずの本からの直接コピーです。これらの問題を修正するためにスクリプトに加えなければならない複数の変更があるように思えます。私はそれに刺すが、私はどこにも来ていないようだ。あなたが指導のための他のアイデアを持っているなら、私は本当に感謝します。もしあなたがそれを手にしているなら、私は喜んでスクリプトのあなたの修正版を試してみるでしょう! – ge0m3try