PyQt(Python+Qt)学习随笔:clicked和clicked(bool)信号连接同名函数出现的问题
阅读原文时间:2023年07月08日阅读:3

在Qt中,控件中的clicked()信号和clicked(bool)信号是两个不同的信号,映射槽函数时,clicked()信号映射到的槽函数是不带参的,clicked(bool)信号映射到的槽函数是带参数的。

经验证测试,如果把一个控件的clicked()信号和clicked(bool)信号映射到名字相同但参数不同的槽函数会导致二者最终会执行同一个槽函数,具体执行哪个槽函数由代码中槽函数的定义顺序决定,执行的是后定义的槽函数。

我们来验证一下,在一个PushButtong上分别定义这两个信号与槽函数的连接,它们连接到同名的槽函数clickButton,如图:

槽函数定义代码如下:

python
    def clickButtonNoPar(self):
        pButton = self.sender()
        print(f"clickButtonNoPar  was called!")

    def clickButton(self,status):
        pButton = self.sender()
        print(f"clickButton  was called,status={status}")

在PyCharm执行情况如下:

上图中,蓝笔圈的部分是槽函数的定义代码,黄色荧光笔标记时执行的输出,可以看到,按钮的clicked()信号和clicked(bool)信号映射到同名(clickButton)但参数不同的槽函数会导致二者最终会执行同一个槽函数clickButton(self,status)。如果把上述槽函数的定义代码顺序倒换一下,就会执行槽函数clickButton(self)。

当然,如果二者映射到不同槽函数,这个问题就不会存在。

之所以出现这个问题,老猿认为是PyQt内部槽函数映射机制存在缺陷导致的。


博客地址:https://blog.csdn.net/LaoYuanPython

老猿Python博客文章目录:https://blog.csdn.net/LaoYuanPython/article/details/98245036