【问题标题】:Python PyQt4 QSlider Interval bigger than 1Python PyQt4 QSlider 间隔大于 1
【发布时间】:2018-05-09 17:56:47
【问题描述】:

我正在滚动区域中制作一个带有多个 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...

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

【问题讨论】:

    标签: python user-interface pyqt4 qslider


    【解决方案1】:

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

    对于 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:如果您希望鼠标点击直接跳转到滑块位置,请参阅:

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 标签也是如此吗?我需要按位置手动添加它们还是有更简单的方法?
      • 您可以在滑块值发生变化时将其更新为正确的值。只要确保你没有遇到反馈循环。
      • 我的意思是每个刻度的标签(10,20,30...),有没有办法在创建滑块时添加它们?
      猜你喜欢
      • 2012-03-13
      • 2019-06-21
      • 1970-01-01
      • 2020-10-07
      • 1970-01-01
      • 1970-01-01
      • 2017-01-06
      • 2020-08-02
      • 2020-02-14
      相关资源
      最近更新 更多