Ho provato a passare attraverso IRC per vedere se le persone possono aiutarmi con questo, ma il mezzo sembra un po 'goffo per chiarire le risposte, quindi proverò invece.
Vorrei programmare un'applicazione standalone usando PyQGIS come posso già programmare applicazioni standalone usando ArcPy.
PyQGIS stesso è semplice. Non ho avuto difficoltà a utilizzare gli script Python all'interno dell'editor della console QGIS. Tuttavia, per utilizzare i collegamenti Python in uno script autonomo, mi viene consigliato di modificare le impostazioni dell'ambiente tramite uno script batch (sto usando Windows Vista a casa, quindi stiamo parlando di script batch per Windows). Ciò ha provocato un disastro da parte mia, poiché non capisco davvero gli script batch e non mi piace l'idea che sto ripristinando un ambiente che deve essere un certo modo per altre applicazioni che eseguo.
Ho difficoltà a capire perché le istruzioni per la creazione di queste impostazioni sono così inutilmente complicate e perché non equivalgono a una riga di codice che dice "vai dove si trovano i binding, rendi disponibili le librerie che voglio siano disponibili per questo programma Certamente ArcPy non richiede alle persone di scherzare con le impostazioni ambientali del computer, quindi ho difficoltà a capire perché PyQGIS lo fa, a quanto pare le persone semplicemente rinunceranno piuttosto che insegnare a se stesse Windows Batch Scripting Language.
Ora noto che quando eseguo uno script nell'editor della console di QGIS, funziona. Certo, rende anche il resto di QGIS inutilizzabile dopo l'esecuzione dello script, quindi devo riavviare QGIS in seguito, ma lo script funziona esattamente come l'ho programmato per funzionare. Ma quando lo faccio al di fuori dell'applicazione QGIS, non lo fa. Il problema non sembra essere che non sono riuscito a importare alcuni pacchetti Python importati automaticamente dall'applicazione QGIS (qgis.core e qgis.utils) - Ho queste istruzioni di importazione nel mio script autonomo, insieme a tutti gli altri pacchetti che importano il lo script richiede. Questo mi porta a credere che la differenza sia che l'applicazione QGIS imposta correttamente le variabili di ambiente esterne, ma tali variabili non sono impostate correttamente quando lo eseguo come script autonomo.
Inoltre, quando eseguo lo script come script autonomo, passa attraverso tutto il codice senza generare un errore; semplicemente non fa ciò che il codice comanda. Quando eseguo lo script nell'editor della console, fa tutto correttamente. Quando lo eseguo come autonomo, crea una finestra, quindi immediatamente lo distrugge, senza generare errori. Quindi l'interprete comprende tutto ciò che sto chiedendo alla sceneggiatura di fare - semplicemente non lo farà.
Ecco la sceneggiatura:
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()
Per favore ... c'è un modo in cui posso eseguire questo script al di fuori di QGIS e farlo funzionare come in QGIS (idealmente senza chiudere le cose alla fine)?
QGIS è un programma meraviglioso, e PyQGIS sembra intuitivo come ArcPy e sarebbe un vero vantaggio per un software open source - ma se le persone devono passare attraverso tutti i cerchi che ho già attraversato e ancora non hanno un'applicazione standalone l'accesso alle librerie PyQGIS nel modo in cui hanno accesso ad ArcPy, mi sembra che PyQGIS non sarà di grande utilità per le persone. Spero di sbagliarmi e questo è più facile di quanto non sia stato finora. Qualcuno ha una soluzione?