Exemplo n.º 1
0
        def __init__(self, items, title=None, expdat=None):
            super().__init__()
            self.additional_info = {}
            self._expdat = expdat
            if title:
                self.setWindowTitle(title)

            self.main_widget = QWidget(self)
            self.layout = QVBoxLayout(self)

            self.widgets = {}
            for idx, citem in enumerate(items):
                if citem['type'] == 'label':
                    widget = QLabel(text=citem.get('label'))
                    self.add(widget)
                elif citem['type'] == 'string':
                    widget = QLineEdit(citem.get('default'))
                    self.add(widget,
                             label=citem.get('label'),
                             name=citem.get('label'))
                elif citem['type'] == 'int':
                    widget = QSpinBox()
                    if 'max' in citem:
                        widget.setMaximum(citem['max'])
                    if 'default' in citem:
                        widget.setValue(citem.get('default'))
                    self.add(widget,
                             label=citem.get('label'),
                             name=citem.get('label'))
                elif citem['type'] == 'float':
                    widget = QDoubleSpinBox()
                    if 'max' in citem:
                        widget.setMaximum(citem['max'])
                    if 'default' in citem:
                        widget.setValue(citem.get('default'))
                    self.add(widget,
                             label=citem.get('label'),
                             name=citem.get('label'))
                elif citem['type'] == 'combo':
                    widget = QComboBox()
                    widget.addItems(citem.get('items'))
                    self.add(widget,
                             label=citem.get('label'),
                             name=citem.get('label'))
                elif citem['type'] == 'field':
                    if expdat is None:
                        logger.warn('Experiment is empty for dialog %s' %
                                    title)
                        return None
                    widget = QComboBox()
                    if citem.get('withnone', False):
                        items = ['<none>'] + list(
                            expdat.sample_metadata.columns.values)
                    else:
                        items = expdat.sample_metadata.columns.values
                    widget.addItems(items)
                    self.add(widget, label=citem.get('label'), name='field')
                elif citem['type'] == 'value':
                    if expdat is None:
                        logger.warn('Experiment is empty for dialog %s' %
                                    title)
                        return None
                    widget = QLineEdit()
                    self.add(widget,
                             label=citem.get('label'),
                             name=citem.get('label'),
                             addbutton=True)
                elif citem['type'] == 'value_multi_select':
                    if expdat is None:
                        logger.warn('Experiment is empty for dialog %s' %
                                    title)
                        return None
                    widget = QLineEdit()
                    self.add(widget,
                             label=citem.get('label'),
                             name=citem.get('label'),
                             add_select_button=citem,
                             idx=idx)
                elif citem['type'] == 'filename':
                    widget = QLineEdit()
                    self.add(widget,
                             label=citem.get('label'),
                             name=citem.get('label'),
                             addfilebutton=True)
                elif citem['type'] == 'bool':
                    widget = QCheckBox()
                    if 'default' in citem:
                        widget.setChecked(citem.get('default'))
                    self.add(widget,
                             label=citem.get('label'),
                             name=citem.get('label'))
                elif citem['type'] == 'select':
                    widget = QLabel('<None>')
                    citem['selected'] = []
                    self.add(widget,
                             label=citem.get('label'),
                             name=citem.get('label'),
                             add_select_button=citem,
                             idx=idx)

            buttonBox = QDialogButtonBox(QDialogButtonBox.Ok
                                         | QDialogButtonBox.Cancel)

            buttonBox.accepted.connect(self.accept)
            buttonBox.rejected.connect(self.reject)

            self.layout.addWidget(buttonBox)
Exemplo n.º 2
0
    class setting:
        """
        A class used to store setting, and display a widget for the user to
        modify it.
        """
        def __init__(self,
                     name,
                     type,
                     label,
                     widget=None,
                     default=None,
                     tooltip=None,
                     min=None,
                     max=None,
                     vals=None,
                     suffix=""):
            self.name = name
            self.type = type
            self.label = label
            self._widget = widget
            self.default = default
            self.min = min
            self.max = max
            self.vals = vals.split("|") if vals else []
            self.suffix = suffix
            self.tooltip = tooltip

        def widget(self, parent=None):
            """
            Returns the widget used, or creates it if not done yet. If parent
            is given, widget is inserted in parent's layout.
            """
            if self._widget:
                return self._widget

            else:

                if "checkbox" in self.type:
                    self._widget = QCheckBox(self.label)
                    if self.default:
                        self._widget.setChecked(True)
                    if parent:
                        parent.layout().addWidget(self._widget)

                elif "number" in self.type:
                    l = QHBoxLayout()
                    label = QLabel(self.label, parent)
                    label.setWordWrap(True)
                    l.addWidget(label, 8)
                    self._widget = QSpinBox()
                    self._widget.setValue(self.default if self.default else 0)
                    if self.min:
                        self._widget.setMinimum(self.min)
                    if self.max:
                        self._widget.setMaximum(self.max)
                    if self.suffix:
                        self._widget.setSuffix(self.suffix)
                    l.addWidget(self._widget, 2)
                    if parent:
                        parent.layout().addLayout(l)

                elif "combo" in self.type:
                    l = QHBoxLayout()
                    label = QLabel(self.label, parent)
                    label.setWordWrap(True)
                    l.addWidget(label, 6)
                    self._widget = QComboBox()
                    self._widget.addItems(self.vals)
                    if self.default:
                        self._widget.setCurrentText(self.default)
                    l.addWidget(self._widget, 2)
                    if parent:
                        parent.layout().addLayout(l)

                elif "text" in self.type:
                    l = QHBoxLayout()
                    label = QLabel(self.label, parent)
                    label.setWordWrap(True)
                    l.addWidget(label, 5)
                    self._widget = QLineEdit()
                    self._widget.setStyleSheet(style.lineEditSS())
                    if self.default:
                        self._widget.setText(self.default)
                    l.addWidget(self._widget, 3)
                    if parent:
                        parent.layout().addLayout(l)

                elif "label" in self.type:
                    self._widget = QLabel(self.label, parent)
                    self._widget.setWordWrap(True)
                    if parent:
                        parent.layout().addWidget(self._widget)

                if self.tooltip:
                    self._widget.setToolTip(self.tooltip)

                return self._widget

        def value(self):
            """
            Return the value contained in the widget.
            """
            if not self._widget:
                return self.default

            else:

                if "checkbox" in self.type:
                    return self._widget.isChecked()

                elif "number" in self.type:
                    return self._widget.value()

                elif "combo" in self.type:
                    return self._widget.currentText()

                elif "text" in self.type:
                    return self._widget.text()
Exemplo n.º 3
0
    class setting:
        """
        A class used to store setting, and display a widget for the user to
        modify it.
        """
        def __init__(self, name, type, label, widget=None,  default=None,
                     tooltip=None, min=None, max=None, vals=None, suffix=""):
            self.name = name
            self.type = type
            self.label = label
            self._widget = widget
            self.default = default
            self.min = min
            self.max = max
            self.vals = vals.split("|") if vals else []
            self.suffix = suffix
            self.tooltip = tooltip

        def widget(self, parent=None):
            """
            Returns the widget used, or creates it if not done yet. If parent
            is given, widget is inserted in parent's layout.
            """
            if self._widget:
                return self._widget

            else:

                if "checkbox" in self.type:
                    self._widget = QCheckBox(self.label)
                    if self.default:
                        self._widget.setChecked(True)
                    if parent:
                        parent.layout().addWidget(self._widget)

                elif "number" in self.type:
                    l = QHBoxLayout()
                    label = QLabel(self.label, parent)
                    label.setWordWrap(True)
                    l.addWidget(label, 8)
                    self._widget = QSpinBox()
                    self._widget.setValue(self.default if self.default else 0)
                    if self.min:
                        self._widget.setMinimum(self.min)
                    if self.max:
                        self._widget.setMaximum(self.max)
                    if self.suffix:
                        self._widget.setSuffix(self.suffix)
                    l.addWidget(self._widget, 2)
                    if parent:
                        parent.layout().addLayout(l)

                elif "combo" in self.type:
                    l = QHBoxLayout()
                    label = QLabel(self.label, parent)
                    label.setWordWrap(True)
                    l.addWidget(label, 6)
                    self._widget = QComboBox()
                    self._widget.addItems(self.vals)
                    if self.default:
                        self._widget.setCurrentText(self.default)
                    l.addWidget(self._widget, 2)
                    if parent:
                        parent.layout().addLayout(l)

                elif "text" in self.type:
                    l = QHBoxLayout()
                    label = QLabel(self.label, parent)
                    label.setWordWrap(True)
                    l.addWidget(label, 5)
                    self._widget = QLineEdit()
                    self._widget.setStyleSheet(style.lineEditSS())
                    if self.default:
                        self._widget.setText(self.default)
                    l.addWidget(self._widget, 3)
                    if parent:
                        parent.layout().addLayout(l)

                elif "label" in self.type:
                    self._widget = QLabel(self.label, parent)
                    self._widget.setWordWrap(True)
                    if parent:
                        parent.layout().addWidget(self._widget)

                if self.tooltip:
                    self._widget.setToolTip(self.tooltip)

                return self._widget

        def value(self):
            """
            Return the value contained in the widget.
            """
            if not self._widget:
                return self.default

            else:

                if "checkbox" in self.type:
                    return self._widget.isChecked()

                elif "number" in self.type:
                    return self._widget.value()

                elif "combo" in self.type:
                    return self._widget.currentText()

                elif "text" in self.type:
                    return self._widget.text()