1

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

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

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)

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

有没有办法保留这个值,所以它只会返回刻度值?还有一种方法可以在刻度上添加标签及其值吗?

4

2 回答 2

1

实际上,不,没有简单的解决方案,所以你最好的选择是清理self.slider_value_change.

于 2017-11-26T10:19:19.530 回答
1

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

对于间隔为 10 的 10-90 的值范围,只有 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:如果您希望鼠标点击直接跳转到滑块位置,请参阅:

于 2017-11-26T19:26:01.720 回答