GUI编程--PyQt5--QAbstractButton


QAbstractButton是一个抽象类,无法直接使用。
在这里插入图片描述

绘制事件

from PyQt5.QtWidgets import QAbstractButton
from PyQt5.QtGui import QPainter, QPen, QColor
# 定义按钮类
class Laufing(QAbstractButton):
    # 必须重写绘制事件
    def paintEvent(self, e: QtGui.QPaintEvent):
        #
        print("开始绘制按钮....")

        # 1.创建一个画家
        painter = QPainter(self)

        # 2. 给他一支笔
        pen = QPen(QColor(155, 130, 225), 5)  # 颜色 宽度
        painter.setPen(pen)

        # 3. 开始绘制
        painter.drawText(0, 20, self.text())
        painter.drawEllipse(0, 0, 100, 100) # 绘制椭圆 (矩形区域的内切)

使用自己的按钮类:

# 添加一个按钮
btn = Laufing(self)
btn.setText("666")  # self.text()
btn.resize(100, 100)

设置文本

btn.setText(“xxx”) 设置文本
btn.text() 获取文本

 

btn.setIcon(QIcon) 设置图标,在文本左侧
btn.setIconSize(QSize(20,30))
btn.icon()
btn.iconSize() 获取大小

设置快捷键

设置与按钮的点击关联的快捷键

# 1
btn.setText("&abc")  # alt + a 触发点击
btn.setText("a&bc")  # alt + b 触发

# 2 
btn.setShortcut("ctrl+j")   # 字符串中间不能有空格
btn.setShortcut("Alt+A")  # 不分大小写

设置自动重复

点击按钮不松开,重复发送信号,重复执行槽函数

# 设置自动重复  按下按钮  不松
btn.setAutoRepeat(True)
btn.setAutoRepeatDelay(2000)  # 2s后开始检测自动重复
btn.setAutoRepeatInterval(1000) # 自动重复的间隔 为1s

btn.autoRepeat()  # 是否自动重复
btn.autoRepeatDelay() # 多久后检测自动重复
btn.autoRepeatInteval() # 自动重复的间隔

在这里插入图片描述

按钮状态

# 按下的状态
btn.setStyleSheet("QPushButton:pressed {background-color: pink}")
btn.setDown(True)
btn.isDown()

# 设置可选中
btn.setCheckable(True)
btn.isCheckable()  # 是否可选中
btn.setChecked(True)  # 设置为选中
btn.isChecked() # 是否选中
btn.toggle()  # 选中、取消选中  来回切换

btn.setEnable(True) # 可用
btn.isEnable()

 

排他性

同级按钮控件,同时设置排他性,才可以相互之间排斥

btn1 = QPushButton(win)
btn1.setText("1")
btn1.move(50, 50)
btn1.setCheckable(True)
btn1.setAutoExclusive(True)

btn2 = QPushButton(win)
btn2.setText("2")
btn2.move(50, 100)
btn2.setCheckable(True)
btn2.setAutoExclusive(True)

btn2.autoExclusive() # 是否具有排他性

按钮的点击

动画点击会持续固定毫秒数。
在这里插入图片描述
 

按钮点击有效区域

点击按钮时,坐标位置传给hitButton,内部返回True,则按钮释放点击信号;否则不释放信号。
在这里插入图片描述

案例1: 设置点击按钮的右半部分,才触发点击效果

# 重写hitButton
class MyBtn(QPushButton):
    def hitButton(self, pos: QtCore.QPoint):
        print("点击的位置:", pos)

        if pos.x() > self.width()/2:
        	# 有效
            return True
		# 无效
        return False

案例2: 设置点击按钮的内切圆区域,才触发点击效果,释放信号
在这里插入图片描述

class MyBtn(QPushButton):
    def hitButton(self, pos: QtCore.QPoint):
        print("点击的位置:", pos)

        # 思路:点击的点 与圆心位置的距离 < = 半径
        # 按钮的左上角为原点, 点击的点的坐标
        pos_x = pos.x()
        pos_y = pos.y()
        # 圆心坐标
        circle_x = circle_y = self.width()/2

        # 计算距离
        import math
        if math.sqrt((pos_x - circle_x)**2 + (pos_y - circle_y)**2) <=  self.width()/2:
            return True

        return False

    def paintEvent(self, a0: QtGui.QPaintEvent):
        super().paintEvent(a0)

        # 重写自己的部分
        painter = QPainter(self)
        # 画笔
        pen = QPen(QColor(155, 130, 225), 7)
        painter.setPen(pen)

        # 绘制
        painter.drawEllipse(0, 0, 100, 100)

按钮的信号

def func(val):
	print("点击了", val)  # val是按键的选中状态  True or False
btn.clicked.connect(func)

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

laufing

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

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

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

打赏作者

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

抵扣说明:

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

余额充值