Python GUI编程网 > PyQt5控件_PyQt5控件方法大全 > QAbstractButton按钮控件抽象基类使用方法一 - 子类化抽象类
python教程

QAbstractButton按钮控件抽象基类使用方法一 - 子类化抽象类

发布博客:2022年11月8日 21:06
阅读:47
作者:Python GUI编程网

QAbstractButton是所有按钮控件的基类提供按钮的通用功能,如点击、文本等,QAbstractButton继承自QWidget作为抽象类是不能直接实例化为一个对象的。

在PyQt5学习中主要学习内容就是控件,控件根据用途又分为很多不同的大类,比如按钮、输入、展示、容器、结构、滚动等等,其中按钮控件是最常见的一种也是必学的一种,PyQt5框架为了更简洁的划分按钮的功能共性,为所有按钮控件设定了一个父类QAbstractButton,但是由于我们一般不会直接使用QAbstractButton进行实例化,所以设置成抽象类,QAbstractButton包含了所有按钮控件(QPushButton、QCommandLinkButton继承自QPushButton、QToolButton、QRadioButton、QCheckBox)的部分共同属性和功能。

QAbstractButton是所有按钮控件的基类提供按钮的通用功能,如点击、文本等,QAbstractButton继承自QWidget作为抽象类是不能直接实例化为一个对象的。

下面通过一段代码来反证一下QAbstractButton能不能直接实例化。

from PyQt5.Qt import *
 import sys
 
 app = QApplication(sys.argv)
 
 window = QWidget()
 window.setWindowTitle(' - PyQt5中文网')
 window.resize(600, 450)
 window.move(300, 300)
 
 # btn = QPushButton(window)  # 通过QPushButton可以直接实例化一个按钮对象
 btn = QAbstractButton(window)  # 尝试通过QAbstractButton直接实例化按钮控件
 btn.move(60, 60)
 btn.resize(80, 40)
 btn.setText('按钮控件')
 btn.setStyleSheet('background-color:green')
 
 window.show()
 sys.exit(app.exec_())

QAbstractButton

可以看到下面直接出现TypeError错误,错误说明也是不能直接使用抽象类实例化对象。

这时候我们可以定义一个类来继承QAbstractButton实现按钮功能,并且实例化一个按钮,在这里注意要想单独自定义一个子类一定要重写QAbstractButton中的paintEvent()方法。

class Btn(QAbstractButton):  # 自定义一个类继承自QAbstractButton
     def paintEvent(self, evt):  # 重写paintEvent方法
         print('自定义按钮类需要继承QAbstractButton.paintEvent方法')
 
 # btn = QPushButton(window)  # 通过QPushButton可以直接实例化一个按钮对象
 # btn = QAbstractButton(window)  # 尝试通过QAbstractButton直接实例化按钮控件
 btn = Btn(window)  # 尝试通过QAbstractButton直接实例化按钮控件

QAbstractButton

想要绘制(QPainter)一个按钮可以参考我们前面的视频教程有详细讲解,这里就不赘述了,工作中也很少有自己绘制按钮控件的。下面我把代码贴出来,大家自己去试试。

from PyQt5.Qt import *
 import sys
 
 
 class Btn(QAbstractButton):
     def paintEvent(self, p):
         # print('按钮绘制')
         # 绘制方法
         # 1.创建一个画家,指定绘制窗口
         painter = QPainter(self)
         # 2.创建一个画笔
         pen = QPen(QColor(250, 100, 150), 5)  # 画笔宽度主要适用于线条,文本有固定宽度
         # 3.把笔给画家
         painter.setPen(pen)
         # 4.开始画画
         # painter.drawText(50,20,'PyQt5中文网')   # 这里的位置一定要设置在按钮内
         painter.drawText(50, 20, self.text())
         painter.drawEllipse(0, 0, 100, 100)
 
 
 app = QApplication(sys.argv)
 
 window = QWidget()
 window.setWindowTitle('QAbstractButton - PyQt5中文网')
 window.resize(600, 450)
 window.move(300, 300)
 
 # btn = QAbstractButton()
 # btn.setText('WWWW')
 
 btn = Btn(window)
 btn.setText('WWWW')
 btn.resize(100, 100)
 btn.pressed.connect(lambda: print('绘制按钮'))
 
 window.show()
 
 sys.exit(app.exec_())