Eu tento definir atributos de recurso pelo nome do atributo com este código
pr = layer.dataProvider()
pr.addAttributes([QgsField("test", QVariant.Int)])
layer.updateFields()
for feature in layer.getFeatures():
attrName = 'test'
feature[attrName] = 1
mas, como resultado, tenho NULL em todos os campos. Se eu usar
feature.setAttributes([1])
funciona corretamente.
O que eu faço de errado? Por que o recurso [attrName] = 1 não funciona?
Atualização : Encontre esta solução
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)
efeature.setAttribute(layer.fieldNameIndex(attrName), 1)
com os mesmos resultados (de referência da API tem dois métodos setAttribute para recurso com índice e nome)feature[layer.fieldNameIndex(attrName)] = 1
também o mesmo.feature.initAttributes(len(attributes))
)?feature.initAttributes(1)
com o mesmo resultado. Mas verifiquefeature[attrName]
e tenho 1 que eu estou procurando. Mas ainda tem NULL se eu abrir a tabela de atributos na GUI.