当前位置:   article > 正文

028.PyQt5_QAbstractButton_简介&子类化抽象类_qt 不能实例化抽象类

qt 不能实例化抽象类

QAbstractButton简介

  • Abstract:抽象
  • QAbstractButton:抽象类
  • 抽象类:抽象类就是对一堆类共同内容的抽取,包括:属性和方法。抽象类不能直接实例化
  • 抽象类的特点
    1. 抽象类必须包含一个或多个抽象方法,也可以包含普通方法。
    2. 抽象类的抽象方法,在抽象类中并不作实现。
    3. 抽象类不能被实例化
  • QAbstractButton是所有按钮控件的基类,提供按钮的通用功能
  • QAbstractButton继承自QWidget
  • 按钮控件继承关系图

子类化抽象类

  • QAbstractButton功能作用
    1. 提示文本
    2. 图标相关
    3. 设置快捷键
    4. 自动重复
    5. 状态
    6. 排他性
    7. 点击
    8. 设置有效区域
  • 在我们使用这些功能作用的时候,必须先使用一个类别来创建一个对象,再调用这个对象相关的API,从而实现这些功能
  • 但是QAbstractButton是一个抽象类,并不能直接实例化,只能通过子类化来实现他
  • 下面通过代码来试验一下
    1. from PyQt5.Qt import *
    2. import sys
    3. app = QApplication(sys.argv)
    4. window = QWidget()
    5. window.resize(500500)
    6. window.setWindowTitle('QAbstractButton简介')
    7. btn = QAbstractButton(window)
    8. btn.setText('QabstractButton按钮')
    9. window.show()
    10. sys.exit(app.exec_())
  • 直接通过QAbstractButton实例化来创建对象,运行会报错
  • PyQt5.QtWidgets.QAbstractButton 表示一个c++抽象类,不能被实例化(应该子类化一个类别才行)
  • 子类化一个类别:写一个类,继承自他(PyQt5.QtWidgets.QAbstractButton)
    1. from PyQt5.Qt import *
    2. import sys
    3. app = QApplication(sys.argv)
    4. window = QWidget()
    5. window.resize(500500)
    6. window.setWindowTitle('QAbstractButton简介')
    7. # QAbstractButton子类化
    8. class Btn(QAbstractButton):
    9.     pass
    10. btn = Btn(window)
    11. btn.setText('QabstractButton按钮')
    12. window.show()
    13. sys.exit(app.exec_())
  • 虽然子类化了一个类别,但是执行的时候依然报错
  • 告诉我们QAbstractButton.paintEvent()<绘制方法>是一个抽象方法,必须重写
  • 我们先重写一下这个方法,具体的步骤先不写
    1. from PyQt5.Qt import *
    2. import sys
    3. app = QApplication(sys.argv)
    4. window = QWidget()
    5. window.resize(500200)
    6. window.setWindowTitle('QAbstractButton简介')
    7. # QAbstractButton子类化
    8. class Btn(QAbstractButton):
    9.     def paintEvent(self, evt) -> None:
    10.         print('绘制按钮')
    11. btn = Btn(window)
    12. btn.setText('QabstractButton按钮')
    13. window.show()
    14. sys.exit(app.exec_())
  • 此时我们再执行的时候就不会报错了
  • 我们再在绘制事件中手动画一个按钮(大概了解一下就行,无需看懂,后面有专门讲绘图部分)
    1. 创建画家(设置绘制区域:纸)
    2. 创建画笔(RGB颜色,粗细)
    3. 给画家设置一支笔
    4. 画家开始绘制文本(x, y , '文本内容')
    5. 画家绘制椭圆(x, y, width, height)
      • 椭圆实际是在指定的矩形内绘制内切圆
      • x, y 是设置绘制对象的起始坐标
      • width, height 是设置矩形的宽和高
    1. from PyQt5.Qt import *
    2. import sys
    3. app = QApplication(sys.argv)
    4. window = QWidget()
    5. window.resize(500200)
    6. window.setWindowTitle('QAbstractButton简介')
    7. # QAbstractButton子类化
    8. class Btn(QAbstractButton):
    9.     def paintEvent(self, evt):
    10.         # print('绘制按钮')
    11.         # 手动绘制一个按钮
    12.         # 1. 创建画家(设置绘制区域:纸)
    13.         painter = QPainter(self)
    14.         # 2. 创建画笔(RGB颜色,粗细)
    15.         pen = QPen(QColor(111,200,20), 2)
    16.         # 3. 给画家设置一支笔
    17.         painter.setPen(pen)
    18.         # 4. 画家开始绘制文本(x, y , '内容')
    19.         painter.drawText(2020, self.text())
    20.         # 5. 画家绘制椭圆(x, y, width, height)
    21.         # 椭圆实际是在指定的矩形内绘制内切圆
    22.         painter.drawEllipse(00, self.width(), self.height())
    23. btn = Btn(window)
    24. btn.setText('QabstractButton按钮')
    25. btn.resize(200,50)
    26. # 验证自定义按钮的点击事件信号
    27. btn.pressed.connect(lambda : print('点击了自定义按钮'))
    28. window.show()
    29. sys.exit(app.exec_())
  • 运行结果
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/爱喝兽奶帝天荒/article/detail/904324
推荐阅读
相关标签
  

闽ICP备14008679号