การตั้งค่าคุณสมบัติคุณสมบัติตามชื่อผ่านทาง 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

แต่ในผลลัพธ์ฉันมีค่าว่างในทุกสาขา ถ้าฉันใช้

feature.setAttributes([1])

มันทำงานได้อย่างถูกต้อง

ฉันทำอะไรผิด ทำไมคุณสมบัติ [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))) แล้วหรือยัง?
ม.ค. Šimbera

เพิ่มfeature.initAttributes(1)ด้วยผลลัพธ์เดียวกัน แต่ตรวจสอบfeature[attrName]และได้รับ 1 ซึ่งฉันกำลังมองหา แต่ก็ยังมี NULL ถ้าฉันเปิดตารางคุณสมบัติในกุย
dmitry.v.kiselev
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.