QGIS python api ile özellik özniteliğini ada göre ayarlama?


13

Bu nitelik ile öznitelik adına göre öznitelik özelliklerini ayarlamaya çalışıyorum

pr = layer.dataProvider()
pr.addAttributes([QgsField("test", QVariant.Int)])
layer.updateFields()
for feature in layer.getFeatures():
 attrName = 'test'
 feature[attrName] = 1

ama sonuçta tüm alanlarda NULL var. Kullanırsam

feature.setAttributes([1])

düzgün çalışıyor.

Neyi yanlış yapıyorum? [AttrName] = 1 özelliği neden çalışmıyor?

Güncelleme : Bu çözümü bulun

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

Yanıtlar:


18

QGIS alan adlarını ve dizinleri kullanabilir:

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

Katmanda herhangi bir şey yapmadan önce düzenleme modunda olduğunuzdan emin olun:

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

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

-1

AFAIK, QGIS atama için alan adlarını değil alan indekslerini kullanır. Kullanmayı deneyin feature[layer.fieldNameIndex(attrName)] = 1.


Ben denemek: feature.setAttribute(attrName, 1)ve feature.setAttribute(layer.fieldNameIndex(attrName), 1)aynı sonuçları ile (api referans indeks ve isim özellik için iki setAttribute yöntemleri var)
dmitry.v.kiselev

feature[layer.fieldNameIndex(attrName)] = 1aynı.
dmitry.v.kiselev

( feature.initAttributes(len(attributes))) Niteliklerini başlattınız mı ?
Jan Šimbera

feature.initAttributes(1)Aynı sonuç ile ekleyin . Ama kontrol edin feature[attrName]ve aradığım 1 var. Ancak gui'de Attribute Table'ı açarsam hala NULL var.
dmitry.v.kiselev
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.