Próbuję ustawić atrybuty funkcji według nazwy atrybutu za pomocą tego kodu
pr = layer.dataProvider()
pr.addAttributes([QgsField("test", QVariant.Int)])
layer.updateFields()
for feature in layer.getFeatures():
attrName = 'test'
feature[attrName] = 1
ale w rezultacie mam NULL we wszystkich polach. Jeśli użyję
feature.setAttributes([1])
działa poprawnie.
Co robię źle? Dlaczego funkcja [attrName] = 1 nie działa?
Aktualizacja : znajdź to rozwiązanie
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)
ifeature.setAttribute(layer.fieldNameIndex(attrName), 1)
ze same wyniki (odniesienie api mają dwie metody setAttribute dla funkcji z indeksem i nazwa)feature[layer.fieldNameIndex(attrName)] = 1
również to samo.feature.initAttributes(len(attributes))
)?feature.initAttributes(1)
z tym samym wynikiem. Ale sprawdźfeature[attrName]
i dostałem 1, którego szukam. Ale nadal mam NULL, jeśli otworzę tabelę atrybutów w GUI.