He intentado pasar por IRC para ver si las personas pueden ayudarme con esto, pero el medio parece un poco torpe para aclarar las respuestas, así que voy a intentar esto en su lugar.
Me gustaría programar una aplicación independiente usando PyQGIS de la misma manera que ya puedo programar aplicaciones independientes usando ArcPy.
PyQGIS en sí es sencillo. No he tenido dificultades para usar scripts de Python en el editor de la consola QGIS. Sin embargo, para usar los enlaces de Python en una secuencia de comandos independiente, se me aconseja que cambie la configuración del entorno usando una secuencia de comandos por lotes (estoy usando Windows Vista en casa, por lo que estamos hablando de secuencias de comandos por lotes para Windows). Esto ha resultado en un desastre de mi parte, ya que realmente no entiendo las secuencias de comandos por lotes, y no me gusta la idea de que estoy restableciendo un entorno que debe ser de cierta manera para otras aplicaciones que ejecuto.
Tengo dificultades para entender por qué las instrucciones para crear estas configuraciones son tan innecesariamente complicadas y por qué no equivalen a una línea de código que dice "ve a donde están los enlaces, haz que las bibliotecas que quiero estén disponibles para que este programa las use Ciertamente, ArcPy no requiere que las personas jueguen con la configuración ambiental de la computadora, por lo que tengo dificultades para entender por qué PyQGIS lo hace. Me parece que la gente simplemente se dará por vencida en lugar de aprender el lenguaje de secuencia de comandos por lotes de Windows.
Ahora, noto que cuando ejecuto un script en el editor de consola de QGIS, funciona. Por supuesto, también hace que el resto de QGIS sea inutilizable después de que se ejecute el script, por lo que tengo que reiniciar QGIS nuevamente después, pero el script funciona exactamente como lo programé para que funcione. Pero cuando lo hago fuera de la aplicación QGIS, no lo hace. El problema no parece ser que no haya podido importar algún paquete de Python importado automáticamente por la aplicación QGIS (qgis.core y qgis.utils): tengo esas declaraciones de importación en mi script independiente, junto con todos los demás paquetes que importan guión requiere. Esto me lleva a creer que la diferencia es que la aplicación QGIS establece correctamente las variables de entorno externas, pero esas variables no se configuran correctamente cuando lo ejecuto como un script independiente.
Además, cuando ejecuto el script como un script independiente, pasa por todo el código sin generar un error; simplemente no hace lo que ordena el código. Cuando ejecuto el script en el editor de la consola, lo hace todo correctamente. Cuando lo ejecuto de forma independiente, crea una ventana, luego lo destruye inmediatamente, sin arrojar errores. Entonces, el intérprete entiende todo lo que le pido al script que haga, simplemente no lo hará.
Aquí está el guión:
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()
Por favor ... ¿hay alguna forma de ejecutar este script fuera de QGIS y hacer que funcione como lo hace dentro de QGIS (idealmente sin cerrar las cosas al final)?
QGIS es un programa maravilloso, y PyQGIS parece tan intuitivo como ArcPy y sería una verdadera ventaja para un software de código abierto, pero si la gente tiene que pasar por todos los obstáculos que ya he pasado, y todavía no tengo una aplicación independiente acceso a las bibliotecas PyQGIS de la forma en que tienen acceso a ArcPy, me parece que PyQGIS no será de mucha utilidad para las personas. Espero estar equivocado y esto es más fácil de lo que ha sido hasta ahora. ¿Alguien tiene una solución?
Al consultar la documentación de PyQGis, encontrará que hay cuatro formas principales de utilizar la API de PyQGis:
y te interesa este último punto:
Debido a que usa la versión Python de ArcGIS, en otros casos, lo mismo es cierto, mire usando arcpy fuera de arcmap o Configure PyScripter para usar con QGIS (y aún use arcpy) en Windows , por ejemplo.
No necesita aquí PyQt4, Tkinter o qgis.gui:
Entonces, para eso, debe aprender PyQt4, ya que debe aprender Tkinter (o wxPython), por ejemplo. Este es otro problema: la solución dada por gsherman es un problema de PyQt4, no de PyQGIS (consulte el tutorial de PyQt4 , por ejemplo)
fuente