5

我想指定 QSlider 可以滑动的步骤,就像 QSpinBox 可以使用setSingleStep. 我尝试使用 QAbstractSlider 的 setSingleStep,但这似乎没有效果。

有任何想法吗?

4

2 回答 2

8

尝试设置tickInterval

编辑

对不起,tickInterval,并没有完全考虑它,但是我有这个工作代码,它可以使用setSingleStep完成你想要的

import sys
from PyQt4.QtGui import QApplication, QSlider, QMainWindow

class Window(QMainWindow):
    def __init__(self, parent = None):
        super(Window, self).__init__(parent)

        slider = QSlider()
        slider.setMinimum(0)
        slider.setMaximum(100)

        slider.setTickInterval(20)
        slider.setSingleStep(20)


        self.setCentralWidget(slider)


if __name__ == "__main__":
    app = QApplication(sys.argv)

    window = Window()
    window.show()

    sys.exit(app.exec_())
于 2011-01-28T12:31:40.587 回答
1

我扩展了 QSlider 类以限制用户,使他们无法跟踪步骤之间的滑块。该SetInterval方法等效于组合setTickIntervalsetSingleStep方法,但也停止将滑块定位在刻度值之间。

该类还允许使用浮点值作为滑块限制或间隔,并允许设置和读取滑块上所选点的索引。

class DoubleSlider(qw.QSlider):

    def __init__(self, *args, **kargs):
        super(DoubleSlider, self).__init__( *args, **kargs)
        self._min = 0
        self._max = 99
        self.interval = 1

    def setValue(self, value):
        index = round((value - self._min) / self.interval)
        return super(DoubleSlider, self).setValue(index)

    def value(self):
        return self.index * self.interval + self._min

    @property
    def index(self):
        return super(DoubleSlider, self).value()

    def setIndex(self, index):
        return super(DoubleSlider, self).setValue(index)

    def setMinimum(self, value):
        self._min = value
        self._range_adjusted()

    def setMaximum(self, value):
        self._max = value
        self._range_adjusted()

    def setInterval(self, value):
        # To avoid division by zero
        if not value:
            raise ValueError('Interval of zero specified')
        self.interval = value
        self._range_adjusted()

    def _range_adjusted(self):
        number_of_steps = int((self._max - self._min) / self.interval)
        super(DoubleSlider, self).setMaximum(number_of_steps)
于 2020-04-26T10:20:03.760 回答