Ich habe versucht, durch das IRC zu gehen, um zu sehen, ob mir die Leute dabei helfen können, aber das Medium scheint etwas ungeschickt zu sein, um Antworten klar zu machen, also werde ich es stattdessen versuchen.
Ich möchte eine eigenständige Anwendung mit PyQGIS so programmieren, wie ich bereits eigenständige Anwendungen mit ArcPy programmieren kann.
PyQGIS selbst ist unkompliziert. Ich hatte keine Schwierigkeiten, Python-Skripte im QGIS-Konsoleneditor auszuführen. Um die Python-Bindungen in einem eigenständigen Skript verwenden zu können, wird empfohlen, die Umgebungseinstellungen mithilfe eines Batch-Skripts zu ändern (ich verwende Windows Vista zu Hause, daher sprechen wir über Batch-Scripting für Windows). Dies hat zu einem Durcheinander geführt, da ich Batch-Scripting nicht wirklich verstehe und die Idee, dass ich eine Umgebung zurücksetze, die für andere von mir ausgeführte Anwendungen eine bestimmte Art und Weise sein muss, nicht mag.
Ich habe Schwierigkeiten zu verstehen, warum die Anweisungen zum Erstellen dieser Einstellungen so unnötig kompliziert sind und warum sie sich nicht auf eine Codezeile belaufen, in der steht: "Gehen Sie zu den Bindungen, und stellen Sie die gewünschten Bibliotheken für dieses Programm zur Verfügung." ) Bei ArcPy müssen die Benutzer sicherlich nicht mit den Umgebungseinstellungen des Computers herumspielen, daher habe ich Schwierigkeiten zu verstehen, warum PyQGIS dies tut. Mir scheint, dass die Benutzer einfach aufgeben, anstatt sich selbst die Windows Batch Scripting Language beizubringen.
Jetzt stelle ich fest, dass es funktioniert, wenn ich ein Skript im QGIS-Konsoleneditor ausführe. Zugegeben, es macht auch den Rest von QGIS unbrauchbar, nachdem das Skript ausgeführt wurde, sodass ich QGIS danach erneut starten muss, aber das Skript funktioniert genau so, wie ich es programmiert habe. Wenn ich dies jedoch außerhalb der QGIS-Anwendung tue, ist dies nicht der Fall. Das Problem scheint nicht zu sein, dass ich ein Python-Paket, das automatisch von der QGIS-Anwendung importiert wurde (qgis.core und qgis.utils), nicht importiert habe. Ich habe diese Importanweisungen in meinem eigenständigen Skript, zusammen mit allen anderen Paketimporten Skript erfordert. Dies lässt mich glauben, dass der Unterschied darin besteht, dass die QGIS-Anwendung externe Umgebungsvariablen korrekt festlegt, diese Variablen jedoch nicht richtig festgelegt werden, wenn ich sie als eigenständiges Skript ausführe.
Wenn ich das Skript als eigenständiges Skript ausführe, durchläuft es außerdem den gesamten Code, ohne einen Fehler auszulösen. es macht einfach nicht das, was der Code befiehlt. Wenn ich das Skript im Konsoleneditor ausführe, wird alles korrekt ausgeführt. Wenn ich es als eigenständiges System ausführe, wird ein Fenster erstellt und sofort zerstört, ohne dass Fehler auftreten. Der Interpreter versteht also alles, was ich vom Skript verlange - es wird es einfach nicht tun.
Hier ist das Skript:
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()
Bitte ... gibt es eine Möglichkeit, dieses Skript außerhalb von QGIS auszuführen und es so zu machen, wie es in QGIS funktioniert (idealerweise ohne die Dinge ganz am Ende herunterzufahren)?
QGIS ist ein wunderbares Programm, und PyQGIS scheint genauso intuitiv zu sein wie ArcPy und wäre ein echter Vorteil für eine Open-Source-Software - aber wenn die Leute alle Rahmen durchlaufen müssen, die ich bereits durchlaufen habe, und immer noch keine eigenständige Anwendung haben Zugriff auf PyQGIS-Bibliotheken so wie sie Zugriff auf ArcPy haben, scheint mir PyQGIS für Menschen nicht von großem Nutzen zu sein. Ich hoffe ich liege falsch und das ist einfacher als bisher. Hat jemand eine Lösung?
In der PyQGis-Dokumentation finden Sie vier Möglichkeiten, die PyQGis-API zu verwenden:
und Sie interessieren sich für diesen letzten Punkt:
Da Sie die Python-Version von ArcGIS verwenden, gilt dies auch in anderen Fällen. Verwenden Sie arcpy außerhalb von arcmap oder konfigurieren Sie PyScripter für die Verwendung mit QGIS (und verwenden Sie weiterhin arcpy) unter Windows .
Sie brauchen hier nicht PyQt4, Tkinter oder qgis.gui:
Dazu müssen Sie PyQt4 lernen, da Sie beispielsweise Tkinter (oder wxPython) lernen müssen. Dies ist ein weiteres Problem: Die von gsherman angegebene Lösung ist ein Problem von PyQt4, nicht von PyQGIS (siehe beispielsweise das PyQt4-Tutorial ).
quelle