一、QAbstractSlider
包含了QSlider、QScrollBar、QDial三个子类。
1、数值范围+当前数值
(1)框架
(2)操作及展示
1 label = QLabel(self) 2 label.setText("0") 3 label.move(200, 200) 4 label.resize(100, 30) 5 6 sd = QSlider(self) 7 sd.move(100, 100) 8 # sd.valueChanged.connect(lambda val:label.setText(str(val))) 9 10 # 设置最大值和最小值 11 sd.setMaximum(100) 12 sd.setMinimum(60) 13 14 # 当前数值 15 sd.setValue(88) # 当前的数值为88 16 sd.valueChanged.connect(lambda: label.setText(str(sd.value()))) # 获取当前数值
2、步长+滑块位置
(1)框架
(2)操作及展示
1 # 设置步长 2 # sd.setSingleStep(5) # 键盘操作有效 3 sd.setPageStep(8) # 用pagedown和pageup操作 4 5 # 是否追踪 6 print(sd.hasTracking()) # 查看 7 sd.setTracking(False) # 显示与滑块拖动不同步
3、滑块位置
(1)框架
(2)操作及展示
1 # 滑块位置的设置 2 sd.setSliderPosition(88)
4、倒立外观+操作反转+滑块方向
(1)框架
(2)操作及展示
1 sd.setInvertedAppearance(True) # 倒立外观 2 sd.setInvertedControls(True) # 操作反转 3 sd.setOrientation(Qt.Horizontal) # 水平滑块
5、信号
(1)框架
(2)操作及展示
1 # 信号 2 # sd.sliderMoved.connect(lambda val:print(val)) 3 # sd.actionTriggered.connect(lambda val:print(val)) 4 sd.rangeChanged.connect(lambda min,max:print(min,max)) 5 6 sd.setMinimum(99)
二、子类QSlider
1、刻度控制
(1)框架
(2)操作及展示
1 # *******************QSlider**********************开始 2 from PyQt5.Qt import * 3 4 class Window(QWidget): 5 def __init__(self): 6 super().__init__() 7 self.setWindowTitle("QSlider") 8 self.resize(500, 500) 9 self.setup_ui() 10 11 def setup_ui(self): 12 sd = QSlider(self) 13 sd.move(200,200) 14 sd.resize(30,200) 15 sd.setPageStep(5) 16 17 # sd.setTickPosition(QSlider.TicksLeft) # 刻度线展示 左边 18 # sd.setTickPosition(QSlider.TicksRight) # 刻度线展示 右边 19 sd.setTickPosition(QSlider.TicksBothSides) # 刻度线展示 两边 20 21 sd.valueChanged.connect(lambda val:print(val)) 22 23 if __name__ == '__main__': 24 import sys 25 26 app=QApplication(sys.argv) 27 28 window=Window() 29 window.show() 30 sys.exit(app.exec_()) 31 # *******************QSlider**********************结束
2、案例展示
1 # *******************QSlider-案例**********************开始 2 from PyQt5.Qt import * 3 4 class Slider(QSlider): 5 def __init__(self,parent=None,*args,**kwargs): 6 super().__init__(parent, *args, **kwargs) 7 self.setTickPosition(QSlider.TicksBothSides) 8 self.setup_ui() 9 10 def setup_ui(self): 11 self.label = QLabel(self) 12 self.label.setText("0") 13 self.label.setStyleSheet("color:red") 14 self.label.hide() 15 16 def mousePressEvent(self, evt): 17 super().mousePressEvent(evt) # 非常重要 18 x = (self.width()-self.label.width())/2 19 # y/height = (最大值-最小值-当前值)/(最大值-最小值) 20 # y/height = 1-当前值/(最大值-最小值) 21 # y = (1-当前值/(最大值-最小值)*height 22 y = (1-self.value()/(self.maximum()-self.minimum()))*self.height()-self.label.height() 23 self.label.show() 24 self.label.move(x,y) 25 26 def mouseMoveEvent(self, evt): 27 super().mouseMoveEvent(evt) 28 29 x = (self.width() - self.label.width()) / 2 30 # y/height = (最大值-最小值-当前值)/(最大值-最小值) 31 # y/height = 1-当前值/(最大值-最小值) 32 # y = (1-当前值/(最大值-最小值)*height 33 y = (1 - self.value() / (self.maximum() - self.minimum())) * (self.height() - self.label.height()) 34 self.label.show() 35 self.label.move(x,y) 36 37 self.label.setText(str(self.value())) 38 self.label.adjustSize() 39 40 def mouseReleaseEvent(self, evt): 41 super().mouseReleaseEvent(evt) 42 self.label.hide() 43 44 45 class Window(QWidget): 46 def __init__(self): 47 super().__init__() 48 self.setWindowTitle("QSlider") 49 self.resize(500, 500) 50 self.setup_ui() 51 52 def setup_ui(self): 53 # 1.创建两个控件 54 slider = Slider(self) 55 slider.move(200,200) 56 slider.resize(30,200) 57 58 59 if __name__ == '__main__': 60 import sys 61 62 app=QApplication(sys.argv) 63 64 window=Window() 65 window.show() 66 sys.exit(app.exec_()) 67 # *******************QSlider-案例**********************结束
三、子类QScrollBar
1 # *******************QScrollBar**********************开始 2 from PyQt5.Qt import * 3 4 class Window(QWidget): 5 def __init__(self): 6 super().__init__() 7 self.setWindowTitle("QScrollBar") 8 self.resize(500, 500) 9 self.setup_ui() 10 11 def setup_ui(self): 12 sb1 = QScrollBar(self) # 垂直滚动条 13 sb1.resize(30,200) 14 sb1.move(100,100) 15 16 sb2 = QScrollBar(Qt.Horizontal,self) # 水平滚动条 17 sb2.resize(300, 30) 18 sb2.move(150, 100) 19 20 sb1.valueChanged.connect(lambda val:print(val)) 21 sb1.setPageStep(50) 22 23 sb1.grabKeyboard() # 捕捉键盘信号 24 25 if __name__ == '__main__': 26 import sys 27 28 app=QApplication(sys.argv) 29 30 window=Window() 31 window.show() 32 sys.exit(app.exec_()) 33 # *******************QScrollBar**********************结束
四、子类QDial
1 # *******************QDial**********************开始 2 from PyQt5.Qt import * 3 4 class Window(QWidget): 5 def __init__(self): 6 super().__init__() 7 self.setWindowTitle("QDail") 8 self.resize(500, 500) 9 self.setup_ui() 10 11 def setup_ui(self): 12 dia = QDial(self) 13 dia.setRange(0,200) # 设置范围 14 dia.setNotchesVisible(True) # 显示刻度 15 dia.setPageStep(5) # 大刻度控制 16 dia.setWrapping(True) # 是否启用包裹(控件周围全是刻度) 17 dia.setNotchTarget(10) # 控制刻度密度 18 19 label = QLabel(self) 20 label.move(200,100) 21 label.setText("哈哈哈哈") 22 23 def test(val): 24 label.setStyleSheet("font-size:{0}px;".format(val)) 25 label.adjustSize() 26 27 # dia.valueChanged.connect(lambda val:print("值发生了改变",val)) 28 dia.valueChanged.connect(test) 29 30 if __name__ == '__main__': 31 import sys 32 33 app=QApplication(sys.argv) 34 35 window=Window() 36 window.show() 37 sys.exit(app.exec_()) 38 # *******************QDial**********************结束