PyQt5 clicked和clicked[bool]信号区别

网友的解释(跟实践有冲突)

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

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

1、clicked()

映射槽函数时,clicked()信号映射到的槽函数是不带参的,比如槽函数可以写作def ClickedAction(self),与按钮动作连接的语句为self.btn.clicked.connect(self.ClickedAction);

2、clicked(bool)

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}")

#结果
按下按钮了,此后按钮状态为:False

(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}")

# 结果
按下按钮了,此后按钮状态为:True

我的实验

上面说了一堆别人的见解,但是我实际操作发现。不管是clicked还是clicked[bool],槽函数如果带参都是可以的,而且都能获取到status的值的

其中statu在setCheckable(True)的时候,第一次点击的值为True,否则都是为False

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章