def ajouter_parametre(self, parametre, panel, sizer): type_ = parametre.type psizer = QHBoxLayout() if type_ is not bool: psizer.addWidget(QLabel(parametre.texte + ' :')) if type_ is bool: widget = QCheckBox(parametre.texte, panel) elif type_ in (open, str): widget = QLineEdit(panel) widget.setMinimumWidth(200) elif isinstance(type_, tuple): widget = QSpinBox(panel) widget.setRange(*type_) elif isinstance(type_, list): widget = QComboBox(panel) widget.addItems(type_) else: print(type_) raise NotImplementedError self.widgets[parametre.nom] = widget widget.parametre = parametre self.set_value(widget, parametre.valeur) psizer.addWidget(widget) if type_ is open: parcourir = QPushButton('Parcourir', clicked=partial(self.parcourir, widget)) psizer.addWidget(parcourir) return psizer
def __init__(self, parent=None, title="Title", data=[], on_ok_clicked=None): QWidget.__init__(self, parent) self.setWindowFlags(Qt.Dialog | Qt.WindowTitleHint | Qt.CustomizeWindowHint | Qt.WindowCloseButtonHint) self.data = data self.output_data = [] self.on_ok_clicked = on_ok_clicked mainLayout = QGridLayout() # create labels and input widgets for i, item in enumerate(self.data): label_widget = QLabel(item["label"] + ":") if isinstance(item["data"], bool): input_widget = QCheckBox() input_widget.setChecked(item["data"]) elif isinstance(item["data"], (int, str)): default = str(item.get("data", "")) input_widget = QLineEdit(default) elif isinstance(item["data"], list): input_widget = QComboBox() input_widget.addItems(item["data"]) else: print(f"Error. Unknown data type: {type(item['data'])}") return if "tooltip" in item: input_widget.setToolTip(str(item["tooltip"])) label_widget.setToolTip(str(item["tooltip"])) item["widget"] = input_widget mainLayout.addWidget(label_widget, i, 0) mainLayout.addWidget(input_widget, i, 1) ok_btn = QPushButton("Ok") ok_btn.clicked.connect(self.on_ok_btn_clicked) mainLayout.addWidget(ok_btn) cancel_btn = QPushButton("Cancel") cancel_btn.clicked.connect(self.on_cancel_btn_clicked) mainLayout.addWidget(cancel_btn) self.setLayout(mainLayout) self.setWindowTitle(title)
def createEditor(self, parent, option, index): """ """ if index.column() != 1: return self.context = self.parent().ctxFactory(index) #pprint(self.context.content) if self.context.get('topLevel', False): return if self.context.get('readonly', False): return edit_format = self.context.get('edit_tree', {}) item = self.context.get('editPos') defeditor = edit_format.get('editor', QLineEdit) if defeditor == QCheckBox: ##editor = QCheckBox(self.context.get('name'),parent) editor = QCheckBox(None, parent) editor.setAutoFillBackground(True) #FIXME make background not transparent elif defeditor == QSpinBox: editor = QSpinBox(parent) editor.setMaximum(edit_format.get('max', 99)) editor.setMinimum(edit_format.get('min', 0)) elif defeditor in (WComboBox, WComboMulti, QComboBox, WComboBoxIdx, WMultiList): """ Con esta revision dejo QComboBox para los casos sencillos (lo que importa es el valor) """ #FIXME parche de presentacion if defeditor != WMultiList: editor = defeditor(parent=parent) else: editor = defeditor() orlist = edit_format.get('source', []) if callable(orlist): self.fullList = sorted(orlist(item, self.parent())) else: self.fullList = orlist if defeditor in (WComboBox, WComboBoxIdx, WComboMulti, QComboBox, WMultiList): editor.addItems(self.fullList) #elif defeditor in (WMultiList, ): #editor.load(self.fullList,[]) elif defeditor == QTextEdit: editor = defeditor() elif defeditor == WPowerTable: editor = defeditor(self.context('rowHead').rowCount() + 2, 2) editor.setHorizontalHeaderLabels(('nombre', 'valor')) context = [] context.append((QLineEdit, {'setEnabled': False}, None)) context.append((QLineEdit, {'setEnabled': True}, None)) for x in range(item.rowCount()): for y, colDef in enumerate(context): editor.addCell(x, y, colDef, defVal=None) editor.resizeRowsToContents() else: #FIXME dialogs probably won't be needed if defeditor == QLineEdit and self.context.get( 'rowHead').hasChildren(): return None editor = defeditor(parent) if isinstance(editor, QLineEdit) and edit_format.get( 'hidden', False): editor.setEchoMode(QLineEdit.Password) #editor.setText(dato) editoptn = edit_format.get('options', {}) if editoptn is not None: #TODO ejecuto los metodos dinamicamente. por ahora solo admite parametros en lista #TODO vale como funcion utilitaria for func in editoptn: try: shoot = getattr(editor, func) except AttributeError: print(editor, editoptn, item) raise if isinstance(editoptn[func], (list, tuple)): parms = editoptn[func] else: parms = (editoptn[func], ) shoot(*parms) return editor