Ich versuche, Feature-Attribute anhand des Attributnamens mit diesem Code festzulegen
pr = layer.dataProvider()
pr.addAttributes([QgsField("test", QVariant.Int)])
layer.updateFields()
for feature in layer.getFeatures():
attrName = 'test'
feature[attrName] = 1
aber im Ergebnis habe ich NULL in allen Feldern. Wenn ich benutze
feature.setAttributes([1])
es funktioniert richtig.
Was ich falsch mache? Warum funktioniert die Funktion [attrName] = 1 nicht?
Update : Finden Sie diese Lösung
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)
undfeature.setAttribute(layer.fieldNameIndex(attrName), 1)
mit den gleichen Ergebnissen (API-Referenz haben zwei setAttribute-Methoden für Feature mit Index und Name)feature[layer.fieldNameIndex(attrName)] = 1
auch das gleiche.feature.initAttributes(len(attributes))
) initialisiert ?feature.initAttributes(1)
Mit dem gleichen Ergebnis hinzufügen . Aber überprüfefeature[attrName]
und habe 1, nach der ich suche. Habe aber immer noch NULL, wenn ich die Attributtabelle in GUI öffne.