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.