Skip to content

Instantly share code, notes, and snippets.

@benwirf
Last active September 15, 2022 11:22
Show Gist options
  • Save benwirf/c0087717ea063b2d8115fa58e72472b2 to your computer and use it in GitHub Desktop.
Save benwirf/c0087717ea063b2d8115fa58e72472b2 to your computer and use it in GitHub Desktop.
class TestDialog(QDialog):
def __init__(self, iface):
QDialog.__init__(self)
self.iface = iface
self.exp_widget = QgsFieldExpressionWidget(self)
self.line_edit = QLineEdit(self)
self.btn = QPushButton('Run', self)
self.list_widget = QListWidget(self)
self.layout = QVBoxLayout()
self.layout.addWidget(self.exp_widget)
self.layout.addWidget(self.btn)
self.layout.addWidget(self.line_edit)
self.layout.addWidget(self.list_widget)
self.setGeometry(500, 300, 500, 300)
self.setLayout(self.layout)
self.btn.clicked.connect(self.get_expression)
self.layer = self.iface.activeLayer()
self.exp_widget.setLayer(self.layer)
self.iface.currentLayerChanged.connect(self.active_layer_changed)
def active_layer_changed(self, lyr):
if lyr is None:
return
self.layer = lyr
self.exp_widget.setExpression('')
self.exp_widget.setLayer(self.layer)
def get_expression(self):
self.line_edit.clear()
self.list_widget.clear()
exp = QgsExpression(self.exp_widget.asExpression())
self.line_edit.setText(str(exp))
context = QgsExpressionContext()
context.appendScopes(QgsExpressionContextUtils.globalProjectLayerScopes(self.layer))
items = []
for f in self.layer.getFeatures():
context.setFeature(f)
val = exp.evaluate(context)
items.append(str(val))
self.list_widget.addItems(items)
def closeEvent(self, e):
self.iface.currentLayerChanged.disconnect(self.active_layer_changed)
dlg = TestDialog(iface)
dlg.show()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment