Exemple #1
0
class ValueEdit(QWidget):
    def __init__(self, title, unit, number_type='double', parent=None):
        super(ValueEdit, self).__init__(parent)
        self.title = QLabel(title)
        self.title.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
        self.unit = QLabel(unit)
        self.unit.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)

        if number_type == 'double':
            self.edit = QDoubleSpinBox()
        elif number_type == 'int':
            self.edit = QSpinBox()
        else:
            raise ValueError(
                'Editor can either be for double or integer values')

        self.edit.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Fixed)
        self.edit.setKeyboardTracking(False)
        self.edit.setAlignment(Qt.AlignRight)
        self.edit.setButtonSymbols(QAbstractSpinBox.NoButtons)

    def set_range_decimals(self, min, max, decimals=3):
        self.edit.setRange(min, max)
        if isinstance(self.edit, QDoubleSpinBox):
            self.edit.setDecimals(decimals)

    def set_single_step_size(self, step=.1):
        self.edit.setSingleStep(step)

    def value(self):
        return self.edit.value()

    @Slot(float)
    def setValue(self, value):
        self.edit.setValue(value)
Exemple #2
0
class IntEditor(QWidget):
    def __init__(self, minval, maxval, stepsize=1, parent=None):
        super(IntEditor, self).__init__(parent)

        # Editfield
        self.edit = QSpinBox(self)
        self.edit.setKeyboardTracking(False)
        self.edit.setRange(minval, maxval)
        self.edit.setSingleStep(stepsize)
        self.edit.setMinimumWidth(70)

        # Slider
        self.slider = QSlider(orientation=Qt.Vertical, parent=self)
        self.slider.setRange(minval, maxval)
        self.slider.setSingleStep(stepsize)
        self.slider.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Expanding)

        # Ticks
        q_ticks = QSlider.TicksBelow
        self.slider.setTickPosition(q_ticks)
        tick_amount = 6
        tick_interval = int(np.floor((maxval - minval) / tick_amount))
        self.slider.setTickInterval(tick_interval)

        # ...labels
        font = QFont()
        font.setPointSize(8)
        tick_str1 = QLabel('{:d}'.format(minval), self)
        tick_str2 = QLabel('{:d}'.format(maxval), self)
        tick_str1.setFont(font)
        tick_str2.setFont(font)
        slider_tick_layout = QGridLayout()
        tick_str1.setAlignment(Qt.AlignBottom | Qt.AlignLeft)
        tick_str2.setAlignment(Qt.AlignTop | Qt.AlignLeft)
        slider_tick_layout.addWidget(self.slider, 0, 0, tick_amount, 1)
        slider_tick_layout.addWidget(tick_str2, 0, 1, 1, 1)
        slider_tick_layout.addWidget(tick_str1, tick_amount - 1, 1, 1, 1)

        # Layout
        layout = QVBoxLayout()
        layout.addLayout(slider_tick_layout)
        layout.addWidget(self.edit)

        self.setLayout(layout)

        # Signals and slots
        self.edit.valueChanged.connect(self.slider.setValue)
        self.slider.valueChanged.connect(self.edit.setValue)