PyQt5 clicked和clicked[bool]信号区别/setCheckable()的应用

在使用命令按钮QPushButton时,最常用的信号列表如下:

信号描述
pressed当鼠标指针在按钮上并按下左键时触发该信号
released当鼠标左键被释放时触发该信号
clicked

当鼠标左键被按下然后释放时,或者快捷键被释放时触发该信号

clicked[bool]当按钮被第一次按下然后释放时发出信号,并将当前状态传递给外界
toggled[bool]按钮的状态发生变化时发出信号,并将当前状态传递给外界
toggled当按钮的标记状态发生改变时触发信号

关于“将当前状态传递给外界”这句作用难以理解,其实就是:控件中的clicked()信号和clicked(bool)信号是两个不同的信号,

  • 映射槽函数时,clicked()信号映射到的槽函数是不带参的,比如槽函数可以写作def ClickedAction(self),与按钮动作连接的语句为self.btn.clicked.connect(self.ClickedAction)
  • clicked(bool)信号映射到的槽函数可以是带参数的,比如槽函数可以写作def ClickedAction(self,status),其中参数status就是按钮当前的状态(Tru or False),而与按钮动作连接的语句self.btn.clicked[bool].connect(self.ClickedAction),无需使用lambda传入status。

很显然,clicked(bool)只是当按钮的setCheckable()设置为True时才有可能使得status为True(即设置后按钮想点灯开关一样,能够按一下保持一直开,再按下保持一直关),否则开关点击一下后仍为关闭状态,status一直为False。clicked例子很简单,在此不说了,clicked[bool]相关情况下的实例如下:

(1)默认为setCheckable(False)的按钮

核心代码:

#按钮及其动作定义
self.btn=QPushButton('验证')
#self.btn.setCheckable(True)
self.btn.setFont(QFont('TypeLand 康熙字典體試用版',20))
self.btn.clicked.connect(self.ClickedAction)  #注意这里不用传入参数status,动作会自动获取status


#动作定义
def ClickedAction(self,status):
    print(f"按下按钮了,此后按钮状态为:{status}")

初始界面为(按钮为灰色):

点击按钮后, 按钮仍为灰色:

且控制台输出:

 重复点击,发现一直为灰色,且每次输出都一样。

(2)setCheckable(True)的按钮

核心代码:

#按钮及其动作定义
self.btn=QPushButton('验证')
self.btn.setCheckable(True)
self.btn.setFont(QFont('TypeLand 康熙字典體試用版',20))
self.btn.clicked.connect(self.ClickedAction)  #注意这里不用传入参数status,动作会自动获取status


#动作定义
def ClickedAction(self,status):
    print(f"按下按钮了,此后按钮状态为:{status}")

初始界面为(按钮为灰色,表示为常开状态):

点击按钮后, 按钮变为蓝色(表示常闭状态).

且控制台输出:

再次点击按钮,按钮再次变成灰色(表示为常开状态) :

且控制台输出:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

David-Chow

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

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

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

打赏作者

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

抵扣说明:

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

余额充值