Example #1
0
    def __init__(self):
        QtGui.QWidget.__init__(self)

        self.start_spinbox = QtGui.QSpinBox()
        self.end_spinbox = QtGui.QSpinBox()
        self.slider = QSpanSlider(QtCore.Qt.Horizontal)

        # Fill background to avoid to see text or widget behind
        self.setAutoFillBackground(True)

        AbstractIntRangeWidget.__init__(self)

        # To be compatible with tree or table views, slider must keep focus
        self.slider.setFocusPolicy(QtCore.Qt.StrongFocus)
        self.setMinimumHeight(22)
        self.start_spinbox.setMinimumHeight(18)
        self.end_spinbox.setMinimumHeight(18)
        self.slider.setMinimumHeight(18)

        self.slider.lowerPositionChanged.connect(self.start_spinbox.setValue)
        self.slider.lowerPositionChanged.connect(self.end_spinbox.setMinimum)
        self.slider.upperPositionChanged.connect(self.end_spinbox.setValue)
        self.slider.upperPositionChanged.connect(self.start_spinbox.setMaximum)

        self.start_spinbox.valueChanged.connect(self.slider.setLowerValue)
        self.end_spinbox.valueChanged.connect(self.slider.setUpperValue)

        self.start_spinbox.valueChanged.connect(self.end_spinbox.setMinimum)
        self.end_spinbox.valueChanged.connect(self.start_spinbox.setMaximum)
        self.start_spinbox.valueChanged.connect(
            self.notify_start_value_changed)
        self.end_spinbox.valueChanged.connect(self.notify_end_value_changed)

        self.slider.spanChanged.connect(self.notify_value_changed)

        layout = QtGui.QHBoxLayout(self)
        layout.setContentsMargins(0, 0, 0, 0)

        layout.addWidget(self.start_spinbox)
        layout.addWidget(self.slider)
        layout.addWidget(self.end_spinbox)

        self.value_changed_signal = self.valueChanged