我尝试使用此代码按属性名称设置要素属性
pr = layer.dataProvider()
pr.addAttributes([QgsField("test", QVariant.Int)])
layer.updateFields()
for feature in layer.getFeatures():
attrName = 'test'
feature[attrName] = 1
但结果我在所有字段中都为NULL。如果我用
feature.setAttributes([1])
它工作正常。
我做错了什么?为什么feature [attrName] = 1不起作用?
更新:查找此解决方案
pr = layer.dataProvider()
pr.addAttributes([QgsField("test", QVariant.Int)])
layer.updateFields()
for feature in layer.getFeatures():
attrName = 'test'
feature[attrName] = 1
pr.changeAttributeValues({feature.id() : {pr.fieldNameMap()[attrName] : 1}})
feature.setAttribute(attrName, 1)
并feature.setAttribute(layer.fieldNameIndex(attrName), 1)
得到相同的结果(api引用具有用于具有索引和名称的功能的两个setAttribute方法)