Ejemplo n.º 1
0
    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
Ejemplo n.º 2
0
    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)
Ejemplo n.º 3
0
    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