文章目录

  • 绘制事件
  • 设置文本
  • 设置快捷键
  • 设置自动重复
  • 按钮状态
  • 排他性
  • 按钮的点击
  • 按钮点击有效区域
  • 按钮的信号



QAbstractButton是一个抽象类,无法直接使用。


python pyqt5 设置按钮 pyqt5改变按钮形状_pyqt5

绘制事件

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() # 自动重复的间隔

python pyqt5 设置按钮 pyqt5改变按钮形状_ci_02

按钮状态

# 按下的状态
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() # 是否具有排他性

按钮的点击

动画点击会持续固定毫秒数。

python pyqt5 设置按钮 pyqt5改变按钮形状_python pyqt5 设置按钮_03


 

按钮点击有效区域

点击按钮时,坐标位置传给hitButton,内部返回True,则按钮释放点击信号;否则不释放信号。

python pyqt5 设置按钮 pyqt5改变按钮形状_qt_04

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

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

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

案例2: 设置点击按钮的内切圆区域,才触发点击效果,释放信号

python pyqt5 设置按钮 pyqt5改变按钮形状_python_05

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)

python pyqt5 设置按钮 pyqt5改变按钮形状_qt_06