通过QGIS Python API按名称设置功能属性?


13

我尝试使用此代码按属性名称设置要素属性

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}})

Answers:


18

QGIS可以使用字段名称和索引:

feature['fieldname'] = 10
feature[1] = 10

在图层上执行任何操作之前,请确保您处于编辑模式:

layer.startEditing()
feature['fieldname'] = 10
layer.updateFeature(feature)

#Call commit to save the changes
layer.commitChanges()

-1

AFAIK,QGIS使用字段索引而不是字段名称进行分配。尝试使用feature[layer.fieldNameIndex(attrName)] = 1


我尝试:feature.setAttribute(attrName, 1)feature.setAttribute(layer.fieldNameIndex(attrName), 1)得到相同的结果(api引用具有用于具有索引和名称的功能的两个setAttribute方法)
dmitry.v.kiselev 2014年

feature[layer.fieldNameIndex(attrName)] = 1也一样。
dmitry.v.kiselev 2014年

您是否已初始化属性(feature.initAttributes(len(attributes)))?
2014年

添加feature.initAttributes(1)相同的结果。但是检查feature[attrName]并得到1我正在寻找。但是如果我在gui中打开属性表,则仍然为NULL。
dmitry.v.kiselev 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.