PyQt5Day08--QAbstractButton

1、QAbstractButton的简介

  所有按钮控件的基类,提供按钮的通用功能

 1 # *******************QAbstractButton**********************开始
 2 import sys
 3 from PyQt5.Qt import *
 4 
 5 app=QApplication(sys.argv)
 6 
 7 window=QWidget()
 8 window.setWindowTitle("QAbstractButton")
 9 window.resize(500,500)
10 
11 class Btn(QAbstractButton):
12     def paintEvent(self,evt):
13         print("绘制按钮")
14         # 创建一个画家
15         painter = QPainter(self)
16 
17         # 创建一支笔
18         pen = QPen(QColor(111,200,20),5)
19         # 设置这支笔
20         painter.setPen(pen)
21 
22         # 画家画
23         painter.drawText(35,55,self.text())
24 
25         painter.drawEllipse(0,0,100,100)
26 
27 
28 btn = Btn(window)
29 btn.setText("xxx")
30 btn.resize(100,100)
31 
32 btn.pressed.connect(lambda :print("点击了这个按钮"))
33 
34 window.show()
35 sys.exit(app.exec_())
36 # *******************QAbstractButton**********************结束

2、QAbstractButton——提示文本

(1)框架

 

(2)操作

 1 # *******************提示文本**********************开始
 2 import sys
 3 from PyQt5.Qt import *
 4 
 5 
 6 app=QApplication(sys.argv)
 7 
 8 window=QWidget()
 9 window.setWindowTitle("提示文本-抽象类")
10 window.resize(500,500)
11 
12 btn = QPushButton(window)
13 btn.setText('1')
14 
15 def plus_one():
16     print("加1")
17     num = int(btn.text()) + 1
18     btn.setText(str(num))
19 
20 btn.pressed.connect(plus_one)
21 
22 window.show()
23 sys.exit(app.exec_())
24 # *******************提示文本**********************结束
提示文本

3、QAbstractButton——图标设置

(1)框架

 

 (2)操作

 1 # *******************图标设置**********************开始
 2 import sys
 3 from PyQt5.Qt import *
 4 
 5 app=QApplication(sys.argv)
 6 
 7 window=QWidget()
 8 window.setWindowTitle("图标操作")
 9 window.resize(500,500)
10 
11 btn = QPushButton(window)
12 btn.setText("按钮")
13 # 设置图标
14 pixmap = QPixmap('xxx.png').scaled(50,50)
15 icon = QIcon(pixmap)
16 btn.setIcon(icon)
17 # 设置图标大小
18 size = QSize(50,50)
19 btn.setIconSize(size)
20 # 查看
21 print(btn.icon())
22 print(btn.iconSize())
23 
24 window.show()
25 sys.exit(app.exec_())
26 # *******************图标设置**********************结束
图标设置

4、QAbstractButton——快捷键设置

(1)框架

(2)操作

 1 # *******************快捷键设置**********************开始
 2 import sys
 3 from PyQt5.Qt import *
 4 
 5 app=QApplication(sys.argv)
 6 
 7 window=QWidget()
 8 window.setWindowTitle("快捷键设置")
 9 window.resize(500,500)
10 
11 btn = QPushButton(window)
12 pixmap = QPixmap('xxx.png').scaled(50,50)
13 icon = QIcon(pixmap)
14 btn.setIcon(icon)
15 # 快捷键设置
16 btn.pressed.connect(lambda :print("按钮被点击了"))
17 # btn.setText("&abc")  # Alt + a也会触发上面的信号与槽
18 btn.setShortcut("Alt+a") # 作用同上
19 
20 window.show()
21 sys.exit(app.exec_())
22 # *******************快捷键设置**********************结束
快捷键设置

5、QAbstractButton——自动重复

(1)框架

(2)操作

 1 # *******************自动重复**********************开始
 2 import sys
 3 from PyQt5.Qt import *
 4 
 5 app=QApplication(sys.argv)
 6 
 7 window=QWidget()
 8 window.setWindowTitle("快捷键设置")
 9 window.resize(500,500)
10 
11 btn = QPushButton(window)
12 pixmap = QPixmap('xxx.png').scaled(50,50)
13 icon = QIcon(pixmap)
14 btn.setIcon(icon)
15 btn.pressed.connect(lambda :print("按钮被点击了"))
16 # 自动重复
17 btn.setAutoRepeat(True)
18 btn.setAutoRepeatDelay(2000) # 初次检测延迟
19 btn.setAutoRepeatInterval(3000) # 检测间隔
20 
21 window.show()
22 sys.exit(app.exec_())
23 # *******************自动重复**********************结束
自动重复
 1 # *******************自动重复-案例**********************开始
 2 import sys
 3 from PyQt5.Qt import *
 4 
 5 def one_plus():
 6     print("加1")
 7     num = int(btn.text()) + 1
 8     btn.setText(str(num))
 9 
10 app=QApplication(sys.argv)
11 
12 window=QWidget()
13 window.setWindowTitle("自动重复-案例")
14 window.resize(500,500)
15 
16 btn = QPushButton(window)
17 btn.setText('1')
18 pixmap = QPixmap('xxx.png').scaled(50,50)
19 icon = QIcon(pixmap)
20 btn.setIcon(icon)
21 size = QSize(50,50)
22 btn.setIconSize(size)
23 
24 btn.setAutoRepeat(True)
25 btn.setAutoRepeatInterval(1000)
26 
27 btn.pressed.connect(one_plus)
28 
29 window.show()
30 sys.exit(app.exec_())
31 # *******************自动重复-案例**********************结束
案例

6、QAbstractButton——状态:按下

(1)框架

(2)操作:按下,切换

 1 # *******************状态**********************开始
 2 import sys
 3 from PyQt5.Qt import *
 4 
 5 app=QApplication(sys.argv)
 6 
 7 window=QWidget()
 8 window.setWindowTitle("状态")
 9 window.resize(500,500)
10 
11 btn = QPushButton(window)
12 btn.setText('哈哈')
13 
14 push_btn = QPushButton(window)
15 push_btn.setText("这是QPushButton")
16 push_btn.move(100,100)
17 
18 radio_btn = QRadioButton(window)
19 radio_btn.setText("这是QRadioButton")
20 radio_btn.move(100,150)
21 
22 checkbox = QCheckBox(window)
23 checkbox.setText("这是QCheckBox")
24 checkbox.move(100,200)
25 
26 # 设置按钮按下颜色:红色
27 push_btn.setStyleSheet("QPushButton:pressed {background-color:red}")
28 
29 # 把三个按钮,置为按下状态
30 # push_btn.setDown(True)
31 # radio_btn.setDown(True)
32 # checkbox.setDown(True)
33 
34 # 检测是否可以选中
35 print(push_btn.isCheckable())  # False  可以通过push_btn.setChecked(True)
36 print(radio_btn.isCheckable()) # True
37 print(checkbox.isCheckable()) # True
38 
39 def cao():
40     push_btn.toggle()
41     radio_btn.toggle()
42     checkbox.toggle()
43 
44 # 切换选中与非选中
45 btn.pressed.connect(cao)
46 
47 window.show()
48 sys.exit(app.exec_())
49 # *******************状态**********************结束
状态

7、QAbstractButton——排他性(性别选择)

(1)框架

  QPushButton 默认是不可选中,不具排他性

  QRadioButton 默认是可选中,具有怕他性

  QCheckButton 默认是可选中,不具排他性

(2)操作

 1 # *******************排他性**********************开始
 2 import sys
 3 from PyQt5.Qt import *
 4 
 5 app=QApplication(sys.argv)
 6 
 7 window=QWidget()
 8 window.setWindowTitle("排他性")
 9 window.resize(500,500)
10 
11 for i in range(0,3):
12     # QPushButton  默认是不可选中,不具排他性
13     # QRadioButton 默认是可选中,具有怕他性
14     # QCheckButton 默认是可选中,不具排他性
15     btn = QPushButton(window)
16     btn.setText('btn'+str(i))
17     btn.move(50*i,50*i)
18 
19     print(btn.autoExclusive()) # 全是False
20     btn.setAutoExclusive(True)  # 排他性
21 
22     print(btn.isChecked()) # 全是False,不可选中
23     btn.setCheckable(True) # 设置为可以选中
24 
25 window.show()
26 sys.exit(app.exec_())
27 # *******************排他性**********************结束
排他性

8、QAbstractButton——按钮模拟点击

(1)框架

(2)操作

 1 # *******************模拟点击**********************开始
 2 import sys
 3 from PyQt5.Qt import *
 4 
 5 app=QApplication(sys.argv)
 6 
 7 window=QWidget()
 8 window.setWindowTitle("按钮模拟点击")
 9 window.resize(500,500)
10 
11 btn = QPushButton(window)
12 btn.setText("这是按钮")
13 btn.move(200,200)
14 btn.pressed.connect(lambda :print("点击了这个按钮"))
15 
16 # btn.click() # 模拟用户的单击
17 # btn.animateClick(2000) # 动画点击
18 
19 btn2 = QPushButton(window)
20 btn2.setText("按钮2")
21 def test():
22     # btn.click()
23     btn.animateClick(1000)
24 btn2.pressed.connect(test)
25 
26 window.show()
27 sys.exit(app.exec_())
28 # *******************模拟点击**********************结束
按钮模拟点击

9、QAbstractButton——可用信号

(1)框架

(2)操作

 1 # *******************可用信号**********************开始
 2 import sys
 3 from PyQt5.Qt import *
 4 
 5 app=QApplication(sys.argv)
 6 
 7 window=QWidget()
 8 window.setWindowTitle("可用信号")
 9 window.resize(500,500)
10 
11 btn = QPushButton(window)
12 btn.setText("这是按钮")
13 btn.move(200,200)
14 btn.setCheckable(True)
15 # btn.pressed.connect(lambda :print("鼠标被按下了"))
16 # btn.released.connect(lambda :print("鼠标释放了"))
17 #
18 # btn.clicked.connect(lambda :print("按钮被点击")) # 在按钮有效区域才可以,在按钮外释放无效
19 btn.toggled.connect(lambda value:print("按钮选中状态发生了改变",value)) # 只有在可以选中的情况下才发生
20 
21 window.show()
22 sys.exit(app.exec_())
23 # *******************可用信号**********************结束
可用信号

10、QAbstractButton——设置点击有效区域

(1)框架

(2)操作:

 1 # *******************设置有效区域**********************开始
 2 import sys
 3 from PyQt5.Qt import *
 4 import math
 5 
 6 class Btn(QPushButton):
 7     def hitButton(self, point):
 8         # print(point)
 9         # if point.x() > self.width()/2: # 按钮右侧有效
10         #     return True
11         # return False
12 
13         # 通过给定的一个点坐标,计算与圆心的距离
14         yuanxin_x = self.width()/2
15         yuanxin_y = self.height()/2
16 
17         hit_x = point.x()
18         hit_y = point.y()
19 
20         distance=math.sqrt(math.pow(hit_x-yuanxin_x,2) + math.pow(hit_y-yuanxin_y,2))
21         # 如果距离<半径,则返回True
22         if distance < self.width()/2:
23             return True
24         return False
25 
26     def paintEvent(self, evt):
27         super().paintEvent(evt)
28         painter = QPainter(self)
29         painter.setPen(QPen(QColor(100,150,200),6))
30         painter.drawEllipse(self.rect())
31 
32 app=QApplication(sys.argv)
33 
34 window=QWidget()
35 window.setWindowTitle("设置有效区域")
36 window.resize(500,500)
37 
38 btn = Btn(window)
39 btn.setText("点击")
40 btn.move(150,150)
41 btn.resize(200,200)
42 btn.pressed.connect(lambda :print("按钮被点击了"))
43 
44 window.show()
45 sys.exit(app.exec_())
46 # *******************设置有效区域**********************结束
设置有效区域

时间:2020-03-19    00:25:06

作者(QQ):931935931

posted @ 2020-03-19 00:26  红叶楠木  阅读(218)  评论(0编辑  收藏  举报