QAbstractButton 是抽象类
from PyQt5.QtWidgets import QApplication, QWidget,QAbstractButton
import sys
from PyQt5.QtGui import QPainter,QPen,QColor class Btn(QAbstractButton): #QAbstractButton是抽象类,必须子类化,[自定义按钮]
def paintEvent(self, evt) : #paintEvent必须有-绘制事件
painter=QPainter(self) #创建一个画家
#参数 给画家一张纸,让画家在self上画
pen=QPen(QColor(255,0,0),3) #创建画笔
painter.setPen(pen) #给画家一根笔
painter.drawText(20,20,self.text()) #画文本
#参数3 返回对象的文本
painter.drawEllipse(0, 0, self.width(), self.height()) # 画椭圆 class win(QWidget):
def __init__(self):
super().__init__()
self.resize(300,300)
self.setWindowTitle('窗口') btn=Btn(self)
btn.move(100,20)
btn.setText('自定义按钮') btn.clicked.connect(self.A) def A(self):
print('按钮点击事件') if __name__=='__main__':
app=QApplication(sys.argv) #创建应用
w=win()
w.show()
sys.exit(app.exec_())
文本设置或获取:
btn.setText('自定义按钮') #设置文本
self.btn.text() 返回文本
图标:
setIcon(QIcon("resource/h1.png")) 设置图标
setIconSize(QSize(w, h)) 设置图标大小
from PyQt5.QtCore import QSize
icon() 获取图标
iconSize() 获取图标大小
设置快捷键:
方式1: 有提示文本的
self.btn.setText('&a按钮') #快捷键是 ALT+a
方式2: 没有提示文本的
self.btn.setShortcut("Alt+G") #快捷键是 ALT+G
shortcut() 返回快捷键
自动重复:
比如用户用鼠标按住按钮时,会连续地发出信号
setAutoRepeat(bool) 设置自动重复
Ture 自动重复
setAutoRepeatInterval(毫秒) 设置自动重复检测间隔
setAutoRepeatDelay(毫秒) 设置初次检测延迟
autoRepeat() 获取是否自动重复
autoRepeatInterval() 获取自动重复检测间隔
autoRepeatDelay() 获取初次检测延迟
状态:
setDown(bool) 设置按钮, 是否被按下
True 按下
注意设置这个属性仅仅是改变钮的外观,不会发射任何信号
isDown() 是否按下按钮
isChecked() 是否选中了按钮
isCheckable() 按钮是否可以被选中
setCheckable(bool) 设置按钮, 是否可以被选中
setChecked(bool) 设置按钮, 是否被选中
toggle() 切换选中与非选中状态
isEnabled() 是否可用
setEnabled(bool) 设置是否可用
排他性:
比如:多个按钮中只能选择一个按钮
排他性 发生在同一级别也就是相同的父控件(同一分组中)的按钮中
autoExclusive() 是否自动排他
一般按钮都是False, 只有单选按钮是True
setAutoExclusive(bool) 设置是否自动排他
模拟鼠标点击:
btn.click() 普通点击
animateClick(ms) 动画点击
参数 相当于鼠标按下后,再经过指定时间才释放
设置点击有效区域:
重写 hitButton(QPoint) 有效返回True 无效返回False
视频教程:https://www.bilibili.com/video/av50026641/
可用信号:
pressed() 鼠标按下信号
released() 鼠标释放:控件内松开鼠标 鼠标移出控件范围后
clicked() 控件内按下+控件内释放
会向槽函数传递一个布尔值(按钮是否被选中)
toggled() 切换信号-选中状态发生变化时发出信号 (一般在单选框或者复选框中使用)
只有把按钮设置为可以被选中才会发出这个信号
会向槽函数传递一个布尔值(按钮是否被选中)
天子骄龙