首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QSlider步进?

QSlider步进?
EN

Stack Overflow用户
提问于 2011-01-28 19:51:18
回答 2查看 12.5K关注 0票数 5

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

有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-01-28 20:31:41

尝试设置tickInterval

编辑

对于tickInterval我很抱歉,没怎么想过,但是我有这个工作代码,它可以用setSingleStep做你想要的事情

代码语言:javascript
复制
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_())
票数 8
EN

Stack Overflow用户

发布于 2020-04-26 18:20:04

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

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

代码语言:javascript
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4827885

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档