Uncategorized

pyqgis – Changing attributes of a newly created feature in Python form init code


  • I have a layer with two attributes: “text” (string) and “int” (integer).
  • I used drag’n’drop form design to have a form with just the “text” attribute in it.
  • I added Python Init Code:
from functools import partial

def on_ok(layer, feature):
    field_idx = layer.fields().indexOf("int")
    attribute_changed = layer.changeAttributeValue(feature.id(), field_idx, 12345)
    if not attribute_changed:
        raise Exception("Attribute value could not be changed!")

def my_form_open(dialog, layer, feature):
    ok_button = dialog.findChild(QPushButton)
    ok_button.clicked.connect(partial(on_ok, layer, feature))

So the form does not show an input widget for the “int” field. But when pressing OK, the code should change the edited feature’s “int” value to 12345.

This works if I edit existing features.

But if I create a new feature, the “int” value will be empty/NULL instead of 12345.
Any pointers on how to properly update a new feature’s attribute fields, that exist on a layer, but are not shown the user with the QGIS’ widgets in the attribute form?

I have already tried

attribute_changed = feature.setAttribute(field_idx, 12345)

and

feature[attribute_name] = 12345

with no success either.

In my real scenario the value would be dynamic and defined elsewhere, the 12345 is just an example.



Source link

Leave a Reply

Your email address will not be published. Required fields are marked *