PyQt5Day22--输入控件QAbstractSlider滑块(鼠标)

一、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-案例**********************结束
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**********************结束

 

posted @ 2020-04-20 16:12  红叶楠木  阅读(330)  评论(0编辑  收藏  举报