Próbowałem przejść przez IRC, aby zobaczyć, czy ludzie mogą mi w tym pomóc, ale medium wydaje się trochę niezdarne z powodu wyjaśniania jakichkolwiek odpowiedzi, więc spróbuję tego.
Chciałbym zaprogramować samodzielną aplikację za pomocą PyQGIS w sposób, w jaki mogę już programować samodzielne aplikacje za pomocą ArcPy.
Sam PyQGIS jest prosty. Nie miałem trudności z uruchomieniem skryptów Python w edytorze konsoli QGIS. Jednak aby użyć powiązań Python w samodzielnym skrypcie, radzę, że muszę zmienić ustawienia środowiska za pomocą skryptu wsadowego (używam Windows Vista w domu, więc mówimy o skryptach wsadowych dla systemu Windows). Spowodowało to bałagan po mojej stronie, ponieważ tak naprawdę nie rozumiem skryptów wsadowych i nie podoba mi się pomysł, że resetuję środowisko, które musi być pewnym sposobem dla innych aplikacji, które uruchamiam.
Mam trudności ze zrozumieniem, dlaczego instrukcje tworzenia tych ustawień są tak niepotrzebnie skomplikowane i dlaczego nie stanowią jednego wiersza kodu mówiącego: „przejdź do miejsca, w którym znajdują się powiązania, udostępnij biblioteki, których chcę, aby ten program mógł używać Z pewnością ArcPy nie wymaga od ludzi, aby bawili się ustawieniami środowiska komputera, więc mam trudności ze zrozumieniem, dlaczego PyQGIS to robi. Wydaje mi się, że ludzie po prostu się poddadzą niż nauczą się języka skryptowego Windows Batch.
Teraz zauważam, że kiedy uruchamiam skrypt w edytorze konsoli QGIS, działa. To prawda, że sprawia, że reszta QGIS nie nadaje się do użytku po uruchomieniu skryptu, więc muszę później ponownie uruchomić QGIS, ale skrypt działa dokładnie tak, jak go zaprogramowałem. Ale kiedy robię to poza aplikacją QGIS, nie robi tego. Problemem nie wydaje się być to, że nie udało mi się zaimportować niektórych pakietów Pythona automatycznie zaimportowanych przez aplikację QGIS (qgis.core i qgis.utils) - Mam te instrukcje importu w moim samodzielnym skrypcie wraz z wszystkimi innymi pakietami skrypt wymaga. To prowadzi mnie do przekonania, że różnica polega na tym, że aplikacja QGIS poprawnie ustawia zewnętrzne zmienne środowiskowe, ale te zmienne nie są ustawione poprawnie, gdy uruchamiam je jako samodzielny skrypt.
Dodatkowo, kiedy uruchamiam skrypt jako samodzielny skrypt, przechodzi przez cały kod bez zgłaszania błędu; po prostu nie robi tego, co nakazuje kod. Kiedy uruchamiam skrypt w edytorze konsoli, robi to wszystko poprawnie. Kiedy uruchamiam go jako samodzielny, tworzy okno, a następnie natychmiast je niszczy, nie zgłaszając żadnych błędów. Tak więc interpreter rozumie wszystko, o co proszę skrypt - po prostu tego nie zrobi.
Oto skrypt:
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()
Proszę ... czy mogę w jakiś sposób uruchomić ten skrypt poza QGIS i sprawić, aby działał tak, jak działa w QGIS (najlepiej bez wyłączania rzeczy na samym końcu)?
QGIS to wspaniały program, a PyQGIS wydaje się tak intuicyjny jak ArcPy i byłby prawdziwą zaletą dla oprogramowania typu open source - ale jeśli ludzie będą musieli przejść przez wszystkie obręcze, przez które już przeszedłem i nadal nie mają samodzielnej aplikacji dostęp do bibliotek PyQGIS w taki sam sposób, w jaki mają dostęp do ArcPy, wydaje mi się, że PyQGIS nie przyda się ludziom. Mam nadzieję, że się mylę i jest to łatwiejsze niż dotychczas. Czy ktoś ma rozwiązanie?
Po zapoznaniu się z dokumentacją PyQGis dowiesz się, że istnieją cztery główne sposoby wykorzystania interfejsu API PyQGis:
i jesteś zainteresowany tym ostatnim punktem:
Ponieważ korzystasz z ArcGIS w wersji Pythona, w innych przypadkach to samo jest prawdą, spójrz na Arcpy poza arcmap lub Skonfiguruj PyScripter do użycia z QGIS (i nadal używaj Arcpy) w systemie Windows , na przykład.
Nie potrzebujesz tutaj PyQt4, Tkinter ani qgis.gui:
W tym celu musisz nauczyć się PyQt4, tak jak na przykład Tkinter (lub wxPython). To kolejny problem: rozwiązanie podane przez gsherman dotyczy problemu PyQt4, a nie PyQGIS (patrz na przykład samouczek PyQt4 )
źródło