Python PyQt4 QSlider 间隔大于 1

Python PyQt4 QSlider Interval bigger than 1

我正在制作一个带有滚动区域中多个 QSlider 的图形用户界面,对于我的一些滑块,我需要间隔 10 而不是 1。

当我打开 gui 时,刻度是正确的并且跳了 10,但是当我 return 当前值时,我仍然可以获得刻度之间的值,例如:

slider = QtGui.QSlider(QtCore.Qt.Horizontal)
slider.setMaximum(90)
slider.setMinimum(10)
slider.setTickInterval(10)
slider.setTickPosition(QtGui.QSlider.TicksBelow)
slider.valueChanged.connect(self.slider_value_change)

函数就是:

def slider_value_change(self,value):
    print(value)

此代码将 return 10,11,12,13... 而不是 10,20...

有没有办法保留该值,使其仅 return 刻度值? 也有没有办法用它的值在刻度上添加一个标签?

实际上,不,对此没有简单的解决方案,所以最好的办法是清理 self.slider_value_change 中的值。

解决这个问题的简单方法是根据滑块位置的数量,而不是它们的具体来思考。

取值范围10-90,区间10,只有9种可能的位置。所以滑块应该这样配置:

slider = QtGui.QSlider(QtCore.Qt.Horizontal)
slider.setMinimum(1)
slider.setMaximum(9)
slider.setTickInterval(1)
slider.setSingleStep(1) # arrow-key step-size
slider.setPageStep(1) # mouse-wheel/page-key step-size
slider.setTickPosition(QtGui.QSlider.TicksBelow)
slider.valueChanged.connect(self.slider_value_change)

现在您只需乘以 10 即可得到所需的值:

def slider_value_change(self, value):
    print(value * 10)

这里的基本思想是,将间隔设置为 1 消除了干预值的可能性 - 因此只能将滑块拖动到一组固定的位置。


关于刻度标签的问题,参见:


PS:如果您希望鼠标点击直接跳转到滑块位置,请参见:

  • QSlider mouse direct jump