QGIS Python API를 통해 이름으로 기능 속성을 설정 하시겠습니까?


13

이 코드를 사용하여 속성 이름으로 기능 속성을 설정하려고합니다.

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

그러나 결과적으로 모든 필드에 NULL이 있습니다. 내가 사용하면

feature.setAttributes([1])

제대로 작동합니다.

내가 뭘 잘못 했니? feature [attrName] = 1이 작동하지 않는 이유는 무엇입니까?

업데이트 :이 솔루션 찾기

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

답변:


18

QGIS는 필드 이름과 색인을 사용할 수 있습니다.

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

레이어에서 작업을 수행하기 전에 편집 모드에 있는지 확인하십시오.

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

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

-1

AFAIK, QGIS는 할당을 위해 필드 이름이 아닌 필드 인덱스를 사용합니다. 를 사용해보십시오 feature[layer.fieldNameIndex(attrName)] = 1.


나는 시도 : feature.setAttribute(attrName, 1)그리고 feature.setAttribute(layer.fieldNameIndex(attrName), 1)동일한 결과 (api 참조 색인과 이름을 가진 기능에 대한 두 setAttribute 메서드가 있습니다)
dmitry.v.kiselev

feature[layer.fieldNameIndex(attrName)] = 1또한 동일합니다.
dmitry.v.kiselev

속성 ( feature.initAttributes(len(attributes))) 을 초기화 했습니까 ?
Jan Šimbera

feature.initAttributes(1)같은 결과를 추가하십시오 . 그러나 확인 feature[attrName]하고 내가 찾는 1을 얻었습니다. 그러나 gui에서 속성 테이블을 열면 여전히 NULL이 있습니다.
dmitry.v.kiselev
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.