def _on_insert_expression(self): # Slot raised to insert an expression. if not isinstance(self._item_widget, QgsLayoutItemBaseWidget): return qrcode_item = self._item_widget.layoutObject() if not qrcode_item: return sel_txt = self._value_text_edit.textCursor().selectedText() # Edit expression text if specified if sel_txt.startswith('[%') and sel_txt.endswith('%]'): sel_txt = sel_txt.lstrip('[%') sel_txt = sel_txt.rstrip('%]') cov_layer = self._item_widget.coverageLayer() exp_ctx = qrcode_item.createExpressionContext() exp_dlg = QgsExpressionBuilderDialog(cov_layer, sel_txt, self, 'generic', exp_ctx) exp_dlg.setWindowTitle(self.tr('Insert Expression for Barcode Data')) exp_dlg.setAllowEvalErrors(False) if exp_dlg.exec_() == QDialog.Accepted: exp = exp_dlg.expressionText() if exp: self._value_text_edit.setPlainText('[%{0}%]'.format(exp))