QAbstractSlider
import sys from PyQt4 import QtGui, QtCore class Example(QtGui.QWidget): def __init__(self): super(Example, self).__init__() # create components self.lcd = QtGui.QLCDNumber(self) self.lcd.setBaseSize(100, 100) self.sldh = QtGui.QSlider(QtCore.Qt.Horizontal, self) self.sldv = QtGui.QSlider(QtCore.Qt.Vertical, self) self.labelh = QtGui.QLabel("HSlider last state", self) self.labelv = QtGui.QLabel("VSlider last state", self) self.repeat = QtGui.QPushButton("Repeat", self); self.stop = QtGui.QPushButton("Stop", self); # create Layout self.grid = QtGui.QGridLayout(self) # add layout widgets self.grid.addWidget( self.lcd, 0, 0 ) self.grid.addWidget( self.sldv, 0, 1 ) self.grid.addWidget( self.sldh, 1, 0 ) self.grid.addWidget( self.labelh, 2, 0 ) self.grid.addWidget( self.labelv, 3, 0 ) self.grid.addWidget( self.repeat, 2, 1 ) self.grid.addWidget( self.stop, 3, 1) self.setLayout(self.grid) # set slots # valueChanged QtCore.QObject.connect(self.sldh, QtCore.SIGNAL('valueChanged(int)'), self.lcd.display) QtCore.QObject.connect(self.sldh, QtCore.SIGNAL('valueChanged(int)'), self.sldv.setValue) QtCore.QObject.connect(self.sldv, QtCore.SIGNAL('valueChanged(int)'), self.lcd.display) QtCore.QObject.connect(self.sldv, QtCore.SIGNAL('valueChanged(int)'), self.sldh.setValue) # actionTriggered QtCore.QObject.connect(self.sldh, QtCore.SIGNAL('actionTriggered(int)'), self.printAction) QtCore.QObject.connect(self.sldv, QtCore.SIGNAL('actionTriggered(int)'), self.printAction) # rangechanged QtCore.QObject.connect(self.sldh, QtCore.SIGNAL('rangeChanged(int,int)'), self.printRange) QtCore.QObject.connect(self.sldv, QtCore.SIGNAL('rangeChanged(int,int)'), self.printRange) # sliderMoved QtCore.QObject.connect(self.sldh, QtCore.SIGNAL('sliderMoved(int)'), self.printMoved) QtCore.QObject.connect(self.sldv, QtCore.SIGNAL('sliderMoved(int)'), self.printMoved) # sliderPressed QtCore.QObject.connect(self.sldh, QtCore.SIGNAL('sliderPressed()'), self.printPressed) QtCore.QObject.connect(self.sldv, QtCore.SIGNAL('sliderPressed()'), self.printPressed) # sliderReleased QtCore.QObject.connect(self.sldh, QtCore.SIGNAL('sliderReleased()'), self.printReleased) QtCore.QObject.connect(self.sldv, QtCore.SIGNAL('sliderReleased()'), self.printReleased) QtCore.QObject.connect(self.repeat, QtCore.SIGNAL('clicked()'), self.doRepeat) QtCore.QObject.connect(self.stop, QtCore.SIGNAL('clicked()'), self.stopRepeat) # 値の設定 self.sldh.setValue(1) self.sldv.setValue(1) # 範囲の設定 # same as setMaximum, setMinimum self.sldh.setRange(0, 50) self.sldv.setRange(10, 40) # トラッキングの有無 # Falseの場合はドラッグして話したときに値が反映される self.sldh.setTracking(True) # スライドの向き self.sldh.setInvertedAppearance(False) # ホイール時の増加向き self.sldv.setInvertedControls(True) # ページキー押下時のステップ数 self.sldh.setPageStep(5) self.sldv.setPageStep(10) # 1回のステップ数 self.sldh.setSingleStep(2) # スライダの位置 self.sldh.setSliderPosition(10) # アクションを引き起こす self.sldh.triggerAction(QtGui.QAbstractSlider.SliderMove) self.setGeometry(300, 300, 300, 300) self.setWindowTitle("QAbstractSlider") self.show() def printAction(self, action): """ 各スライダーの状態を返却 """ if self.sender().orientation() == QtCore.Qt.Vertical: label = self.labelv else: label = self.labelh if action == QtGui.QAbstractSlider.SliderNoAction: label.setText("SliderNoACtion") elif action == QtGui.QAbstractSlider.SliderSingleStepAdd: label.setText("SliderSingleStepAdd") elif action == QtGui.QAbstractSlider.SliderSingleStepSub: label.setText("SliderSingleStepSub") elif action == QtGui.QAbstractSlider.SliderPageStepAdd: label.setText("SliderPageStepAdd") elif action == QtGui.QAbstractSlider.SliderPageStepSub: label.setText("SliderPageStepSub") elif action == QtGui.QAbstractSlider.SliderToMinimum: label.setText("SliderToMinimum") elif action == QtGui.QAbstractSlider.SliderToMaximum: label.setText("SliderToMaximum") elif action == QtGui.QAbstractSlider.SliderMove: label.setText("SliderMove") def printRange(self, min, max): print "range changed: ", min, max def printMoved(self, value): print "moved: ", value def printPressed(self): print "pressed" def printReleased(self): print "released" def doRepeat(self): self.sldh.setRepeatAction(QtGui.QAbstractSlider.SliderSingleStepAdd, 0, 500) def stopRepeat(self): self.sldh.setRepeatAction(QtGui.QAbstractSlider.SliderNoAction) def main(): app = QtGui.QApplication(sys.argv) ex = Example() sys.exit(app.exec_()) if __name__ == '__main__': main()
リピートってどんな時に使うんでしょうか。