QSlider stepping?
我想指定QSlider可以滑动的步骤,就像QSpinBox可以通过使用
有什么想法吗?
尝试设置tickInterval
EDIT
抱歉,tickInterval并没有考虑,但是我有此工作代码,使用setSingleStep
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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_())
我扩展了QSlider类以限制用户,以使他们无法在步骤之间跟踪滑块。
该类还允许将浮点值用作滑块限制或间隔,并允许设置和读取在滑块上选择的点的索引。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | 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) |