028.PyQt5_QAbstractButton_简介&子类化抽象类

QAbstractButton简介

  • Abstract:抽象
  • QAbstractButton:抽象类
  • 抽象类:抽象类就是对一堆类共同内容的抽取,包括:属性和方法。抽象类不能直接实例化
  • 抽象类的特点
    1. 抽象类必须包含一个或多个抽象方法,也可以包含普通方法。
    2. 抽象类的抽象方法,在抽象类中并不作实现。
    3. 抽象类不能被实例化
  • 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_())
    
  • 此时我们再执行的时候就不会报错了
  • 我们再在绘制事件中手动画一个按钮(大概了解一下就行,无需看懂,后面有专门讲绘图部分)
    1. 创建画家(设置绘制区域:纸)
    2. 创建画笔(RGB颜色,粗细)
    3. 给画家设置一支笔
    4. 画家开始绘制文本(x, y , '文本内容')
    5. 画家绘制椭圆(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_())
    
  • 运行结果
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

失心疯_2023

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值