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

यह ठीक से काम करता है।

मैं क्या गलत करूँ? फ़ीचर [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)एक ही परिणाम के साथ (एपीआई संदर्भ में इंडेक्स और नाम के साथ फीचर के लिए दो सेटएट्रिब्यूट विधियां हैं)
dmitry.v.kiselev

feature[layer.fieldNameIndex(attrName)] = 1भी वही।
dmitry.v.kiselev

क्या आपने विशेषताएँ ( feature.initAttributes(len(attributes))) शुरू की हैं?
जन :म्बर १०

feature.initAttributes(1)उसी परिणाम के साथ जोड़ें । लेकिन जांच करें feature[attrName]और 1 मिला जिसे मैं ढूंढ रहा हूं। लेकिन अभी भी NULL है अगर मैं gui में एट्रीब्यूट टेबल को खोलता हूँ।
dmitry.v.kiselev
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.