def add_new_item(self): feature = QgsFeature() attribute_form = QgsAttributeForm(self.layer, parent=self) attribute_form.setMode(QgsAttributeEditorContext.AddFeatureMode) attribute_form.show()
class NTSelectByFormDialog(QDialog): def __init__(self, layer, iface): super().__init__(None) self.setWindowModality(Qt.WindowModal) layout = QVBoxLayout() layout.setMargin(0) layout.setContentsMargins(0, 0, 0, 0) self.setLayout(layout) dlgContext = QgsAttributeEditorContext() dlgContext.setFormMode(QgsAttributeEditorContext.StandaloneDialog) dlgContext.setAllowCustomUi(False) self.form = QgsAttributeForm(layer, context=dlgContext, parent=self) self.form.setMode(3) self.configureForm() layout.addWidget(self.form) self.form.zoomToFeatures.connect(self.zoomToFeatures) self.form.closed.connect(self.close) self.setWindowTitle(self.tr('Filter NavTable Features by Form')) self.expression = '' def configureForm(self): ''' Hack to modify QgsAttributeForm ''' self.form.findChild(QWidget, 'searchButtonBox').hide() self.buttonBox = QDialogButtonBox() self.buttonBox.setOrientation(Qt.Horizontal) self.buttonBox.setStandardButtons(QDialogButtonBox.Cancel | QDialogButtonBox.Ok) self.buttonBox.setObjectName("buttonBox") self.buttonBox.accepted.connect(self.form.searchZoomTo) self.buttonBox.rejected.connect(self.reject) self.form.layout().addWidget(self.buttonBox) def zoomToFeatures(self, filter): self.expression = filter super().accept()
def test_on_update(self): """Test live update""" layer = QgsVectorLayer("Point?field=age:int", "vl", "memory") # set default value for numbers to [1, {age}], it will depend on the field age and should update field = QgsField('numbers', QVariant.List, 'array') field.setEditorWidgetSetup(QgsEditorWidgetSetup('List', {})) layer.dataProvider().addAttributes([field]) layer.updateFields() layer.setDefaultValueDefinition(1, QgsDefaultValue('array(1, age)', True)) layer.setEditorWidgetSetup(1, QgsEditorWidgetSetup('List', {})) layer.startEditing() form = QgsAttributeForm(layer) feature = QgsFeature(layer.fields()) form.setFeature(feature) form.setMode(QgsAttributeEditorContext.AddFeatureMode) form.changeAttribute('numbers', [12]) form.changeAttribute('age', 1) self.assertEqual(form.currentFormFeature()['numbers'], [1, 1]) form.changeAttribute('age', 7) self.assertEqual(form.currentFormFeature()['numbers'], [1, 7])
# coding: utf-8 from qgis.gui import QgsAttributeForm from qgis.utils import iface layer = iface.activeLayer() attribute_form = QgsAttributeForm(layer, layer.getFeatures().next()) attribute_form.setMode(QgsAttributeForm.SingleEditMode) # SingleEditMode, AddFeatureMode, MultiEditMode, SearchMode attribute_form.show()