J'essaie de définir des attributs d'entité par nom d'attribut avec ce code
pr = layer.dataProvider()
pr.addAttributes([QgsField("test", QVariant.Int)])
layer.updateFields()
for feature in layer.getFeatures():
attrName = 'test'
feature[attrName] = 1
mais en résultat j'ai NULL dans tous les domaines. Si j'utilise
feature.setAttributes([1])
cela fonctionne correctement.
Ce que je fais mal? Pourquoi la fonctionnalité [attrName] = 1 ne fonctionne pas?
Mise à jour : Trouvez cette solution
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)
etfeature.setAttribute(layer.fieldNameIndex(attrName), 1)
avec les mêmes résultats (la référence API a deux méthodes setAttribute pour la fonctionnalité avec index et nom)feature[layer.fieldNameIndex(attrName)] = 1
aussi la même chose.feature.initAttributes(len(attributes))
)?feature.initAttributes(1)
avec le même résultat. Mais vérifiezfeature[attrName]
et j'ai obtenu 1 que je cherchais. Mais toujours NULL si j'ouvre la table d'attributs dans l'interface graphique.