Я пытался пройти через IRC, чтобы посмотреть, могут ли люди помочь мне с этим, но среда кажется немного неуклюжей для того, чтобы прояснить любые ответы, поэтому я собираюсь попробовать это вместо этого.
Я хотел бы запрограммировать автономное приложение с использованием PyQGIS так, как я уже могу программировать автономные приложения с использованием ArcPy.
Сам PyQGIS прост. У меня не было проблем с использованием скриптов Python в редакторе консоли QGIS. Однако, чтобы использовать привязки Python в автономном скрипте, я советую изменить параметры среды с помощью пакетного сценария (дома я использую Windows Vista, поэтому мы говорим о пакетном сценарии для Windows). Это привело к беспорядку с моей стороны, так как я не очень разбираюсь в пакетных сценариях, и мне не нравится идея, что я перезагружаю среду, которая должна быть определенным образом для других приложений, которые я запускаю.
У меня возникают трудности с пониманием того, почему инструкции по созданию этих настроек настолько излишне сложны, и почему они не составляют одну строку кода, говорящую «перейдите туда, где находятся привязки, сделайте библиотеки, которые я хочу, доступными для использования этой программой». Конечно, ArcPy не требует, чтобы люди возились с настройками среды компьютера, поэтому мне сложно понять, почему это делает PyQGIS. Мне кажется, что люди просто сдаются, а не изучают язык Windows Batch Scripting Language.
Теперь я заметил, что когда я запускаю скрипт в редакторе консоли QGIS, он работает. Конечно, это также делает остальную часть QGIS непригодной после запуска скрипта, поэтому мне придется снова перезапускать QGIS, но скрипт работает точно так, как я запрограммировал его для работы. Но когда я делаю это вне приложения QGIS, это не так. Похоже, проблема заключается не в том, что мне не удалось импортировать какой-либо пакет Python, автоматически импортированный приложением QGIS (qgis.core и qgis.utils) - у меня есть эти операторы импорта в моем автономном скрипте вместе со всеми другими пакетами, импортирующими скрипт требует. Это заставляет меня поверить, что разница в том, что приложение QGIS правильно устанавливает внешние переменные среды, но эти переменные не устанавливаются должным образом, когда я запускаю его как отдельный скрипт.
Кроме того, когда я запускаю скрипт как отдельный скрипт, он проходит через весь код, не выдавая ошибки; он просто не делает то, что командует кодом. Когда я запускаю скрипт в редакторе консоли, он все делает правильно. Когда я запускаю его как отдельный, он создает окно, а затем сразу же уничтожает его, не выдавая ошибок. Таким образом, интерпретатор понимает все, что я прошу сделать сценарий - он просто не сделает этого.
Вот сценарий:
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()
Пожалуйста ... есть ли какой-нибудь способ, которым я могу запустить этот скрипт за пределами QGIS и заставить его работать так же, как и в QGIS (в идеале, без остановки в самом конце)?
QGIS - замечательная программа, и PyQGIS кажется настолько же интуитивно понятным, как и ArcPy, и станет реальным преимуществом для программного обеспечения с открытым исходным кодом, но если людям придется пройти через все испытания, которые я уже прошел, и все еще не иметь отдельного приложения доступ к библиотекам PyQGIS так же, как у них есть доступ к ArcPy, мне кажется, что PyQGIS не очень пригодится людям. Надеюсь, я ошибаюсь, и это проще, чем было до сих пор. у кого-нибудь есть решение?
Изучив документацию по PyQGis, вы обнаружите, что есть четыре основных способа использования API PyQGis:
и вы заинтересованы в этом последнем пункте:
Поскольку вы используете версию ArcGIS для Python, в других случаях то же самое верно, посмотрите, например, использование arcpy вне arcmap или Configure PyScripter для использования с QGIS (и все еще использовать arcpy) в Windows .
Вам не нужны здесь PyQt4, Tkinter или qgis.gui:
Итак, для этого вы должны изучить PyQt4, как, например, вы должны изучать Tkinter (или wxPython). Это еще одна проблема: решение, данное gsherman, является проблемой PyQt4, а не PyQGIS (см. , Например, учебник по PyQt4 )
источник