J'ai essayé de passer par IRC pour voir si les gens peuvent m'aider, mais le médium semble un peu maladroit pour clarifier les réponses, donc je vais essayer à la place.
Je voudrais programmer une application autonome à l'aide de PyQGIS comme je peux déjà programmer des applications autonomes à l'aide d'ArcPy.
PyQGIS lui-même est simple. Je n'ai eu aucune difficulté à utiliser des scripts Python dans l'éditeur de console QGIS. Cependant, afin d'utiliser les liaisons Python dans un script autonome, je suis informé que je dois modifier les paramètres d'environnement à l'aide d'un script de commandes (j'utilise Windows Vista à la maison, nous parlons donc de scripts de commandes pour Windows). Cela a entraîné un gâchis de ma part, car je ne comprends pas vraiment les scripts par lots, et je n'aime pas l'idée que je réinitialise un environnement qui doit être d'une certaine manière pour les autres applications que j'exécute.
J'ai du mal à comprendre pourquoi les instructions pour créer ces paramètres sont si inutilement compliquées, et pourquoi elles ne se résument pas à une ligne de code disant "allez là où sont les liaisons, rendez les bibliothèques que je veux disponibles pour ce programme à utiliser Il est certain qu'ArcPy n'exige pas que les gens manipulent les paramètres environnementaux de l'ordinateur, j'ai donc du mal à comprendre pourquoi PyQGIS le fait. Il me semble que les gens abandonneront simplement plutôt que de s'enseigner eux-mêmes Windows Batch Scripting Language.
Maintenant, je remarque que lorsque j'exécute un script dans l'éditeur de console de QGIS, cela fonctionne. Certes, cela rend également le reste de QGIS inutilisable après l'exécution du script, je dois donc redémarrer QGIS après, mais le script fonctionne exactement comme je l'ai programmé pour fonctionner. Mais quand je le fais en dehors de l'application QGIS, ce n'est pas le cas. Le problème ne semble pas être que je n'ai pas réussi à importer un package Python importé automatiquement par l'application QGIS (qgis.core et qgis.utils) - J'ai ces instructions d'importation dans mon script autonome, avec tous les autres packages qui importent le le script requiert. Cela m'amène à croire que la différence est que l'application QGIS définit correctement les variables d'environnement externes, mais ces variables ne sont pas définies correctement lorsque je l'exécute en tant que script autonome.
De plus, lorsque j'exécute le script en tant que script autonome, il passe à travers tout le code sans générer d'erreur. il ne fait tout simplement pas ce que le code commande. Lorsque j'exécute le script dans l'éditeur de console, il fait tout correctement. Lorsque je l'exécute en mode autonome, il crée une fenêtre, puis la détruit immédiatement, sans lancer d'erreurs. Donc, l'interprète comprend tout ce que je demande au script de faire - il ne le fera tout simplement pas.
Voici le script:
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()
S'il vous plaît ... est-il possible d'exécuter ce script en dehors de QGIS et de le faire fonctionner comme il le fait dans QGIS (idéalement sans arrêter les choses à la fin)?
QGIS est un merveilleux programme, et PyQGIS semble aussi intuitif qu'ArcPy et serait un réel avantage pour un logiciel open source - mais si les gens doivent passer par tous les cerceaux que j'ai déjà traversés et n'ont toujours pas d'application autonome l'accès aux bibliothèques PyQGIS comme ils ont accès à ArcPy, il me semble que PyQGIS ne sera pas d'une grande utilité pour les gens. J'espère que je me trompe et c'est plus facile qu'il ne l'a été jusqu'à présent. Quelqu'un a-t-il une solution?
En consultant la documentation de PyQGis, vous constaterez qu'il existe quatre façons principales d'utiliser l'API PyQGis:
et vous êtes intéressé par ce dernier point:
Étant donné que vous utilisez la version Python d'ArcGIS, dans d'autres cas, la même chose est vraie, regardez en utilisant arcpy en dehors d'arcmap ou Configure PyScripter pour l'utiliser avec QGIS (et utilisez toujours arcpy) sous Windows , par exemple.
Vous n'avez pas besoin ici de PyQt4, Tkinter ou qgis.gui:
Donc, pour cela, vous devez apprendre PyQt4, comme vous devez apprendre Tkinter (ou wxPython), par exemple. C'est un autre problème: la solution donnée par gsherman est un problème de PyQt4, pas de PyQGIS (regardez le tutoriel PyQt4 , par exemple)
la source