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