我已经尝试过通过IRC来查看人们是否可以帮助我解决这个问题,但是该媒介似乎对于弄清任何答案都有些笨拙,因此我将尝试使用它。
我想使用已经可以使用ArcPy对独立应用程序进行编程的方式,使用PyQGIS对独立应用程序进行编程。
PyQGIS本身很简单。我在使用QGIS控制台编辑器中运行Python脚本时没有遇到困难。但是,为了在独立脚本中使用Python绑定,建议我必须使用批处理脚本更改环境设置(我在家中使用Windows Vista,因此我们正在讨论Windows的批处理脚本)。这最终导致一团糟,因为我不太了解批处理脚本,而且我不喜欢这样的想法,即我正在重置一种环境,该环境必须以某种方式运行我的其他应用程序。
我很难理解为什么创建这些设置的指令如此不必要地复杂,以及为什么它们不等于一行代码说“转到绑定位置,使我想要的库可供该程序使用” )。当然,ArcPy不需要人们去弄乱计算机的环境设置,所以我很难理解PyQGIS的原因,在我看来,人们只会放弃而不是自学Windows批处理脚本语言。
现在,我注意到当我在QGIS的控制台编辑器中运行脚本时,它可以工作。当然,在脚本运行后,它也会使其余QGIS无法使用,因此我必须在此后再次重新启动QGIS,但是该脚本的工作方式与我编程的完全相同。但是,当我在QGIS应用程序之外执行此操作时,事实并非如此。问题似乎不是我未能导入由QGIS应用程序自动导入的某些Python软件包(qgis.core和qgis.utils)-我的独立脚本中包含了这些import语句,以及所有其他软件包都导入了脚本要求。这使我相信,不同之处在于QGIS应用程序正确设置了外部环境变量,但是当我将其作为独立脚本运行时,这些变量没有正确设置。
另外,当我将脚本作为独立脚本运行时,它可以遍历所有代码而不会引发错误。它根本不执行代码命令。当我在控制台编辑器中运行脚本时,它可以正确完成所有操作。当我独立运行它时,它将创建一个窗口,然后立即销毁它,而不会引发任何错误。因此,解释员理解我要脚本执行的所有操作-它只是不会执行。
这是脚本:
from PyQt4 import *
from PyQt4 import *
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from qgis.core import *
from qgis.gui import *
from qgis.utils import *
import Tkinter
from Tkinter import *
import sys
import os
qgishome = "c:/OSGeo4W/apps/qgis/"
app = QgsApplication([], True)
QgsApplication.setPrefixPath(qgishome, True)
QgsApplication.initQgis()
canvas = QgsMapCanvas()
canvas.setCanvasColor(Qt.yellow)
canvas.enableAntiAliasing(True)
canvas.show()
layer = QgsVectorLayer(r"c:/GIS Data/fed308/cpc.shp", "Ridings", "ogr")
reg = QgsMapLayerRegistry.instance()
reg.addMapLayer(layer)
canvas.setExtent(layer.extent())
canvas.setLayerSet([QgsMapCanvasLayer(layer)])
QgsApplication.exitQgis()
请...有什么方法可以在QGIS外部运行此脚本,并使它像在QGIS中一样正常运行(理想情况下无需关闭所有内容)?
QGIS是一个很棒的程序,PyQGIS看起来和ArcPy一样直观,并且对于拥有开源软件来说将是一个真正的优势-但是如果人们不得不经历我已经经历的所有麻烦,并且仍然没有独立的应用程序访问PyQGIS库的方式就像访问ArcPy一样,在我看来PyQGIS对人们来说并没有太大用处。我希望我错了,这比迄今为止要容易。有没有人有办法解决吗?