Eu tentei passar pelo IRC para ver se as pessoas podem me ajudar com isso, mas o meio parece um pouco desajeitado para deixar as respostas claras, então vou tentar fazer isso.
Gostaria de programar um aplicativo independente usando o PyQGIS da maneira que já posso programar aplicativos independentes usando o ArcPy.
O próprio PyQGIS é direto. Não tive dificuldade em usar scripts Python em execução no editor de console do QGIS. No entanto, para usar as ligações Python em um script autônomo, sou aconselhado a alterar as configurações do ambiente usando um script em lote (estou usando o Windows Vista em casa, por isso estamos falando de scripts em lote para Windows). Isso resultou em uma bagunça do meu lado, pois eu realmente não entendo scripts em lote e não gosto da ideia de que estou redefinindo um ambiente que precisa ser uma certa maneira para outros aplicativos executados.
Estou tendo dificuldade para entender por que as instruções para criar essas configurações são desnecessariamente complicadas e por que não representam uma linha de código dizendo "vá para onde estão as ligações, disponibilize as bibliotecas que eu quero disponíveis para que este programa use Certamente, o ArcPy não exige que as pessoas mexam nas configurações ambientais do computador, por isso estou tendo dificuldade em entender o porquê do PyQGIS. Parece-me que as pessoas simplesmente desistem, em vez de aprenderem a linguagem de script de lote do Windows.
Agora, percebo que, quando executo um script no editor de console do QGIS, ele funciona. É verdade que isso também torna o restante do QGIS inutilizável após a execução do script, por isso tenho que reiniciar o QGIS novamente depois, mas o script funciona exatamente como eu o programava para funcionar. Mas quando faço isso fora do aplicativo QGIS, isso não acontece. O problema não parece ser o de que falhei ao importar algum pacote Python importado automaticamente pelo aplicativo QGIS (qgis.core e qgis.utils) - eu tenho essas instruções de importação no meu script independente, juntamente com todos os outros pacotes que importam o script requer. Isso me leva a acreditar que a diferença é que o aplicativo QGIS define corretamente variáveis de ambiente externas, mas essas variáveis não são definidas corretamente quando eu o executo como um script independente.
Além disso, quando executo o script como autônomo, ele passa por todo o código sem gerar um erro; simplesmente não faz o que o código ordena. Quando executo o script no editor do console, ele faz tudo corretamente. Quando o executo como autônomo, ele cria uma janela e a destrói imediatamente, sem gerar erros. Portanto, o intérprete entende tudo o que estou pedindo ao script - simplesmente não o fará.
Aqui está o 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()
Por favor ... existe alguma maneira de executar esse script fora do QGIS e fazê-lo funcionar como no QGIS (idealmente sem desligar as coisas no final)?
O QGIS é um programa maravilhoso, e o PyQGIS parece tão intuitivo quanto o ArcPy e seria uma vantagem real para um software de código aberto - mas se as pessoas tiverem que passar por todos os obstáculos que já passei e ainda não tiverem aplicativos independentes acesso às bibliotecas PyQGIS da maneira como elas têm acesso ao ArcPy, parece-me que o PyQGIS não será muito útil para as pessoas. Espero estar errado e isso é mais fácil do que foi até agora. Alguém tem uma solução?
Consultando a documentação do PyQGis, você encontrará quatro maneiras principais de utilizar a API do PyQGis:
e você está interessado neste último ponto:
Como você usa a versão Python do ArcGIS, em outros casos, o mesmo é verdadeiro, procure usando arcpy outside arcmap ou Configure PyScripter para usar com QGIS (e ainda usar arcpy) no Windows , por exemplo.
Você não precisa aqui de PyQt4, Tkinter ou qgis.gui:
Portanto, para isso, você deve aprender PyQt4, assim como aprender Tkinter (ou wxPython), por exemplo. Esse é outro problema: a solução dada por gsherman é um problema do PyQt4, não do PyQGIS (veja o tutorial do PyQt4 , por exemplo)
fonte