在使用命令按钮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}")
初始界面为(按钮为灰色,表示为常开状态):
点击按钮后, 按钮变为蓝色(表示常闭状态).
且控制台输出:
再次点击按钮,按钮再次变成灰色(表示为常开状态) :
且控制台输出: