Oh... nevermind. I just realized after sending the previous e-mail that I had a typo in my code (was calling the ChangeAttributeValues method with a capital C in the beginning). Please excuse the noise, and thanks Martin for your help :)
On Wed, Aug 11, 2010 at 12:49 AM, Ricardo Filipe Soares Garcia da <[email protected]> wrote: > Hi Martin, list > > I did as you recommended, but now I'm getting the following error: > > Traceback (most recent call last): > File > "/home/ricardo/.qgis/python/plugins/ChannelFromPoints/ChannelFromPointsDialog.py", > line 41, in accept > self.callbackFunction(pLayer, params) > File > "/home/ricardo/.qgis/python/plugins/ChannelFromPoints/ChannelFromPoints.py", > line 119, in calculate_channel > provider.ChangeAttributeValues(values) > TypeError: 'Capability' object is not callable > > My revised code: > > > provider = pointLayer.dataProvider() > newField = QgsField("channel", QVariant.Double) > provider.addAttributes([newField]) > newFieldIndex = provider.fieldNameIndex(newField.name()) > #more code > allAttrs = provider.attributeIndexes() > provider.select(allAttrs) > feat = QgsFeature() > while provider.nextFeature(feat): > # more code, calculating the value of the 'channelValue' variable > values = {feat.id() : {newFieldIndex: QVariant(channel)}} > provider.ChangeAttributeValues(values) > > > Do you have some insight on this error? Thanks for you help > > On Tue, Aug 10, 2010 at 9:55 PM, Martin Dobias <[email protected]> wrote: >> Hi Ricardo >> >> On Mon, Aug 9, 2010 at 2:50 PM, Ricardo Filipe Soares Garcia da >> <[email protected]> wrote: >>> Hello list >>> >>> How can I add a new field to an existing layer and insert some new >>> values in it? In the following example, pointLayer refers to an >>> existing layer, previously created using the memory provider. This >>> code is creating the new field, but I cannot insert the values in it. >>> Although it runs without any error, when I look at the layer's >>> attribute table, the new field is there, but every feature has it as >>> NULL. >> >> The problem is that in your code you only modify a local copy of the >> data - your change is not propagated to the provider. To actually >> modify the data, use something like this: >> >> values = { fid : { attr_1 : QVariant(value_1), attr_2 : >> QVariant(value_2) }, ... } >> provider.changeAttributeValues( values ) >> >> You pass the provider a dictionary where keys are feature IDs, values >> are dictionaries of changed attributes (key = attribute index, value = >> new attribute value). >> >>> By the way, I think this kind of operation would be a nice thing >>> to go into the pyqgis cookbook >> >> Sure, it just needs some time :-) >> >> Regards >> Martin >> > > > > -- > ___________________________ ___ __ > Ricardo Garcia Silva > -- ___________________________ ___ __ Ricardo Garcia Silva _______________________________________________ Qgis-developer mailing list [email protected] http://lists.osgeo.org/mailman/listinfo/qgis-developer
