我刚刚开始了我的第一个QGIS-Plugin . 一部分是将按钮连接到创建点矢量图层的函数 . 我使用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)

代码在内存中工作并创建一个矢量图层,并将其添加到 Map 中 .

我遇到的问题是,每次我关闭插件并重新启动它时,会创建一个额外的矢量图层,并在单击按钮时添加到 Map 中 . 只有重新启动QGIS才会重置 .

当onClosePlugin(self)-function运行时,我试图从QgsMapLayerRegistry中删除该层 . 但这只删除了一个可见层 . 我的猜测是,每次启动插件并单击按钮时,会在“self.pointLayer”变量中添加一个额外的矢量图层,然后传输到QgsMapLayerRegistry . 但为什么不在每次点击?为什么只有在插件重启后呢?我无法解决这个问题,我希望在这里提出一些建议 .

最好的祝福