添加新的QgsFeature时,QgsVectorLayer的属性表未更新

时间:2019-06-25 21:14:05

标签: python plugins qgis

向现有QgsVectorLayer功能添加新的QgsFeature时,不会添加其属性。

我想向现有的QgsVectorLayer添加新的QgsFeature(多边形)。要素已添加到画布(显示在屏幕上),但图层的相应属性表未更新(未添加新创建的要素的属性)

我已经阅读了PyQGIS Cookbook和相关的StackOverflow问题,但是代码无法正常工作,我也不知道我缺少什么。

layer = self.projectInstance.mapLayersByName('draba_obcina')[0]
pr = layer.dataProvider() 
points = [QgsPointXY(0, 0), QgsPointXY(0, 1), QgsPointXY(1, 0), QgsPointXY(0, 0)]

poly = QgsFeature(layer.fields())
#if i set OGC_FID i get SQLite error: UNIQUE constraint failed (although there is no entry with OGC_FID = 3640)
#poly.setAttribute ("OGC_FID", 3640)
poly.setAttribute ("tip_spr", None)
poly.setAttribute ("id", None)
poly.setAttribute ("sif_upr", None)
poly.setAttribute ("id_upr", None)
poly.setAttribute ("vrsta_dr", None)
poly.setAttribute ("vrsta_pov", None)
poly.setAttribute ("nac_dol", None)
poly.setAttribute ("nat_dol", None)
poly.setAttribute ("usklajenost_zk", None)
poly.setAttribute ("graf_pov", None)
poly.setAttribute ("d_spr", None)
poly.setAttribute ("d_vir", None)
poly.setAttribute ("vrsta_el", None)
poly.setAttribute ("opis", "I was created by plugin")
poly.setAttribute ("createdtime", "2019-06-25 18:51:34")
poly.setAttribute ("kat", "10")

poly.setGeometry(QgsGeometry.fromPolygonXY([points]))

res, outFeats = pr.addFeatures([poly])

layer.updateExtents()
layer.commitChanges()
layer.reload() 

pr.addFeatures([poly])返回(res == True)和(outFeats长度为1) 对我来说,这意味着该功能的添加成功。

没有引发错误。

但是新功能仅显示在画布上,并且没有向属性表添加任何属性。

1 个答案:

答案 0 :(得分:0)

解决了我的问题,代码可以正常工作,但是问题是我必须重新加载属性表用户界面,以便在其中显示新属性。