我刚开始使用我的第一个QGIS插件。一部分是将按钮连接到创建点矢量图层的函数。 我使用Plugin-Builder创建了base-plugin,并以内存层开始:
这就是我的“run(self)”函数的自定义部分的样子:
self.dockwidget.createShape.clicked.connect(self.createShp)
def createShp(self):
self.pointLayer = QgsVectorLayer("Point", "test", "memory")
self.pointLayer.startEditing()
self.layerData = self.pointLayer.dataProvider()
self.layerData.addAttributes([ QgsField("ID", QVariant.String), QgsField("testfield", QVariant.String)])
self.pointLayer.commitChanges()
QgsMapLayerRegistry.instance().addMapLayer(self.pointLayer)
代码在内存中工作并创建一个矢量图层,并将其添加到地图中。
我遇到的问题是,每次关闭插件并重新启动它时,会创建一个额外的矢量图层,并在单击按钮时添加到地图中。只有重新启动QGIS才会重置。
当onClosePlugin(self)-function运行时,我试图从QgsMapLayerRegistry中删除该层。但这只删除了一个可见层。 我的猜测是,每次启动插件并单击按钮时,会在“self.pointLayer”变量中添加一个额外的矢量图层,然后传输到QgsMapLayerRegistry。但为什么不是每次点击?为什么只有在插件重启后? 我无法解决这个问题,我希望在这里有一些建议。
祝你好运