pyqt5学习之QAbstractbutton
QAbstractbutton是按钮类抽象的基类,无法使用只能通过子类去实现他所拥有的功能
简单例子
from PyQt5.Qt import * import sys app = QApplication(sys.argv) window = QWidget() window.setWindowTitle('QAbstractButton') window.resize(500, 500) class btn(QAbstractButton): def paintEvent(self, evt): # 1.创建一个画家, 画在什么地方 painter = QPainter(self) # 2 给画家一个笔 # 2.1 创建一个笔 pen = QPen(QColor(111, 200, 20), 5) # 2.2 给画家一个笔 painter.setPen(pen) # 3. 画家画 painter.drawText(25, 40, self.text()) painter.drawEllipse(0, 0, 100, 100) btn = btn(window) btn.setText('xxx') btn.resize(100, 100) btn.pressed.connect(lambda :print("点击了这个按钮")) window.show() sys.exit(app.exec_())
例子展示:
- 文本设置
- 图片设置
- 快捷键设置
- 自动重复
- 按钮状态
- 排他性
- 设置有效区域
from PyQt5.Qt import * import sys app = QApplication(sys.argv) window = QWidget() window.setWindowTitle('按钮的功能测试-抽象类') window.move(200, 200) window.resize(500, 500) # window.setFixedSize(500, 500) # 设定固定尺寸 # *************文本操作***************开始 # btn = QPushButton(window) # btn.setText('1') # 设置提示文本 # def plus_one(): # print('+1') # num = int(btn.text()) + 1 # btn.setText(str(num)) # # btn.pressed.connect(plus_one) # *************文本操作***************结束 # *************图标操作***************开始 # btn = QPushButton(window) # icon = QIcon('dp.png') # 添加图片 # # btn.setIcon(icon) # 按钮设置图片;方式一 # btn.setIcon(QIcon('dp.png')) # # 按钮设置图片;方式二 # # size = QSize(50, 50) # # btn.setIconSize(size) # 设置图片大小;方式一 # btn.setIconSize(QSize(50, 50)) # 设置图片大小;方式二 # # print(btn.icon()) # 获取图标 # print(btn.iconSize()) #获取图标大小 # *************图标操作***************结束 # *************快捷键的设定***************开始 # btn = QPushButton(window) # btn.setText('按钮') # btn.pressed.connect(lambda :print('按钮被点击了')) # btn.setShortcut('a') # 设置快捷键 # btn.setText('a&b') # 有&自动设置快捷键 # *************快捷键的设定***************结束 # *************自动重复***************开始 # 自动重复的意思是按钮一直按着不放,就会一直执行槽函数 # btn = QPushButton(window) # btn.setText('按钮') # btn.setAutoRepeat(True) # 设置自动重复 # btn.setAutoRepeatDelay(2000) # 设置自动重复检测间隔,毫秒 # btn.setAutoRepeatInterval(1000) # 设置初次检测延迟,毫秒 # print(btn.autoRepeat()) # print(btn.autoRepeatDelay()) # print(btn.autoRepeatInterval()) # def cao(): # print(1) # btn.clicked.connect(cao) # *************自动重复***************结束 # *************按钮状态***************开始 # push_button = QPushButton(window) # push_button.setText('这是QPushButton') # push_button.move(100, 100) # # radio_button = QRadioButton(window) # radio_button.setText('这是一个radio') # radio_button.move(100, 150) # # checkbox = QCheckBox(window) # checkbox.setText('这是checkbox') # checkbox.move(100, 200) # push_button.setStyleSheet('QPushButton:pressed {background-colour: red;}') # # # #s设置按下状态 # # push_button.setDown(True) # # radio_button.setDown(True) # # checkbox.setDown(False) # # print(push_button.isDown()) # # print(radio_button.isDown()) # # print(checkbox.isDown()) # # # # 设置按钮是否可以被选中 # # push_button.setCheckable(True) # # print(push_button.isCheckable()) # # push_button.setEnabled(False) # 设置按钮不能使用 # *************按钮状态***************结束 # *************排他性设置***************开始 # # 在同一个控件具有排他性 # for i in range(0, 3): # btn = QCheckBox(window) # btn.setText('btn'+str(i)) # btn.move(50*i, 50*i) # # btn.setAutoExclusive(True) # *************排他性设置***************结束 # *************按钮模拟点击***************开始 # btn = QPushButton(window) # btn.setText('这是按钮') # btn.move(200, 200) # btn.pressed.connect(lambda :print("点击了这个按钮")) # btn.animateClick(2000) # 设置模拟点击 # *************按钮模拟点击***************结束 # *************设置有效区域***************开始 #通过重写hitButton(QPoint)方法,有效返回Ture;无效返回False #设置一个圆形区域 # class btn(QPushButton): # def hitButton(self, point): # # 通过给定的一个点坐标, 计算与圆心的距离 # yuanxin_x = self.width() / 2 # yuanxin_y = self.height() / 2 # # hit_x = point.x() # hit_y = point.y() # # # # ((x1 - x2) 平方 + (y1 - y2) 平方) 开平方 # import math # distance = math.sqrt(math.pow(hit_x - yuanxin_x, 2) + math.pow(hit_y - yuanxin_y, 2)) # if distance < self.width() / 2: # return True # # # 如果距离 < 半径 True # # 返回 False # return False # # # 设置画家 # def paintEvent(self, evt): # super().paintEvent(evt) # painter = QPainter(self) # painter.setPen(QPen(QColor(100, 150, 200), 6)) # # painter.drawEllipse(self.rect()) # # btn = btn(window) # btn.move(100, 100) # btn.setText("点击") # btn.resize(200, 200) # btn.clicked.connect(lambda value: print("按钮选中状态发生了改变", value)) # *************设置有效区域***************结束 window.show() sys.exit(app.exec_())