我是QT,Python和QGIS的新手。我安装了“插件生成器”插件并生成了一个Dockwidget。我能够使用qtcreator更改小部件,并且正在学习如何使用我自己的插件实现信号和插槽。
现在,我的问题。有没有简单的方法可以删除QGIS iface并在QGIS之外使用我的插件逻辑?我目前实际上并没有使用任何PyQGIS库,但我希望保留我的QT接口和“插件生成器”生成的Python代码/结构。有没有办法做到这一点?
感谢。
答案 0 :(得分:0)
是的,有办法做到这一点。但到目前为止,我发现我们需要将整个Qgis库复制到最终的软件包中。在代码中为qgis应用程序设置正确的路径非常重要,如下所示:
QgsApplication.setPrefixPath(r"C:\OSGeo4W\apps\qgis", True)
QgsApplication.initQgis()
QgsProject.instance().setFileName(strProjectName)
我们还需要编写文件并在最后关闭它
QgsProject.instance().write()
QgsApplication.exitQgis()
这是我创建的独立包的快照。代码需要对某些变量进行一些修改才能工作。
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from qgis.core import *
from qgis.gui import *
import os, datetime
class CreateQgs():
def initQgsFile(self, outputFolder, stopRadius):
strProjectName = str(outputFolder) + "\\" + "PhotoLocationMap.qgs"
QgsApplication.setPrefixPath(r"C:\OSGeo4W\apps\qgis", True)
QgsApplication.initQgis()
QgsProject.instance().setFileName(strProjectName)
highwayShapeFilePath = "C:/Shapefiles/Highway.shp"
arterialShapeFilePath = "C:/Shapefiles/StreetsMajor.shp"
highwayLayer = QgsVectorLayer(self.highwayShapeFilePath, 'HighwayDB' , 'ogr')
arterialLayer = QgsVectorLayer(self.arterialShapeFilePath, 'ArterialDB', 'ogr')
symbols = highwayLayer.rendererV2().symbols()
sym = symbols[0]
sym.setColor(QColor.fromRgb(255,94,94))
highwayLayer.triggerRepaint()
symbols = arterialLayer.rendererV2().symbols()
sym = symbols[0]
sym.setColor(QColor.fromRgb(76,138,245))
arterialLayer.triggerRepaint()
mapInstance = QgsMapLayerRegistry.instance()
mapInstance.instance().addMapLayer(arterialLayer)
mapInstance.instance().addMapLayer(highwayLayer)
QgsProject.instance().write()
QgsApplication.exitQgis()
def unitTest():
app = QgsApplication(sys.argv, True)
photoFolderPath = 'C:\Test\QGis\TestPics'
CreateQgsFile = CreateQgs()
CreateQgsFile.initQgsFile(photoFolderPath, 128)
if __name__ == "__main__":
unitTest()