QAbstractButton简介
- Abstract:抽象
- QAbstractButton:抽象类
- 抽象类:抽象类就是对一堆类共同内容的抽取,包括:属性和方法。抽象类不能直接实例化
- 抽象类的特点
- 抽象类必须包含一个或多个抽象方法,也可以包含普通方法。
- 抽象类的抽象方法,在抽象类中并不作实现。
- 抽象类不能被实例化
- QAbstractButton是所有按钮控件的基类,提供按钮的通用功能
- QAbstractButton继承自QWidget
- 按钮控件继承关系图
子类化抽象类
- QAbstractButton功能作用
提示文本 图标相关 设置快捷键 自动重复 状态 排他性 点击 设置有效区域
- 在我们使用这些功能作用的时候,必须先使用一个类别来创建一个对象,再调用这个对象相关的API,从而实现这些功能
- 但是QAbstractButton是一个抽象类,并不能直接实例化,只能通过子类化来实现他
- 下面通过代码来试验一下
from PyQt5.Qt import * import sys app = QApplication(sys.argv) window = QWidget() window.resize(500, 500) window.setWindowTitle('QAbstractButton简介') btn = QAbstractButton(window) btn.setText('QabstractButton按钮') window.show() sys.exit(app.exec_())
- 直接通过QAbstractButton实例化来创建对象,运行会报错
- PyQt5.QtWidgets.QAbstractButton 表示一个c++抽象类,不能被实例化(应该子类化一个类别才行)
- 子类化一个类别:写一个类,继承自他(PyQt5.QtWidgets.QAbstractButton)
from PyQt5.Qt import * import sys app = QApplication(sys.argv) window = QWidget() window.resize(500, 500) window.setWindowTitle('QAbstractButton简介') # QAbstractButton子类化 class Btn(QAbstractButton): pass btn = Btn(window) btn.setText('QabstractButton按钮') window.show() sys.exit(app.exec_())
- 虽然子类化了一个类别,但是执行的时候依然报错
- 告诉我们QAbstractButton.paintEvent()<绘制方法>是一个抽象方法,必须重写
- 我们先重写一下这个方法,具体的步骤先不写
from PyQt5.Qt import * import sys app = QApplication(sys.argv) window = QWidget() window.resize(500, 200) window.setWindowTitle('QAbstractButton简介') # QAbstractButton子类化 class Btn(QAbstractButton): def paintEvent(self, evt) -> None: print('绘制按钮') btn = Btn(window) btn.setText('QabstractButton按钮') window.show() sys.exit(app.exec_())
- 此时我们再执行的时候就不会报错了
- 我们再在绘制事件中手动画一个按钮(大概了解一下就行,无需看懂,后面有专门讲绘图部分)
- 创建画家(设置绘制区域:纸)
- 创建画笔(RGB颜色,粗细)
- 给画家设置一支笔
- 画家开始绘制文本(x, y , '文本内容')
- 画家绘制椭圆(x, y, width, height)
- 椭圆实际是在指定的矩形内绘制内切圆
- x, y 是设置绘制对象的起始坐标
- width, height 是设置矩形的宽和高
from PyQt5.Qt import * import sys app = QApplication(sys.argv) window = QWidget() window.resize(500, 200) window.setWindowTitle('QAbstractButton简介') # QAbstractButton子类化 class Btn(QAbstractButton): def paintEvent(self, evt): # print('绘制按钮') # 手动绘制一个按钮 # 1. 创建画家(设置绘制区域:纸) painter = QPainter(self) # 2. 创建画笔(RGB颜色,粗细) pen = QPen(QColor(111,200,20), 2) # 3. 给画家设置一支笔 painter.setPen(pen) # 4. 画家开始绘制文本(x, y , '内容') painter.drawText(20, 20, self.text()) # 5. 画家绘制椭圆(x, y, width, height) # 椭圆实际是在指定的矩形内绘制内切圆 painter.drawEllipse(0, 0, self.width(), self.height()) btn = Btn(window) btn.setText('QabstractButton按钮') btn.resize(200,50) # 验证自定义按钮的点击事件信号 btn.pressed.connect(lambda : print('点击了自定义按钮')) window.show() sys.exit(app.exec_())
- 运行结果