pyqt5点击按钮却多次执行槽函数

在使用pyqt5的时候 ,点击按钮,这时候神奇的就来了,我用到了界面之间相互跳转的,比如在第一个界面中点击一个按钮,那么会跳出另外一个界面,然后再点击第二个界面中按钮执行某个槽函数后第二个界面就消失,在这个时候,我如果在循环上面的操作,那么这个槽函数就会被执行两次!再循环,就是4次,再循环就是8次。。。。就问你恐怖不。以2的n次方次数来执行。。。。初步猜测是代码中使用.close()这个函数并不是真的关闭了当前的界面,这个界面所占用的线程依旧存在。然后就想着如何完全关闭这个界面,但是没有解决方案。我以为我发现了pyqt5的重大bug,抱着试一试的心态去百度了一下“pyqt5点击按钮却多次执行槽函数”,发现不是我一个人遇到,但是他们的解决方案在我这。。。行不通,大多数博客都是在槽函数前面加上@pyqtSlot修饰函数。没毛用。。。。

后面看了些博客,没有啥有用的解决方案,那么就只能看pyqt5在按钮中有哪些函数了,一不小心,我发现了一个函数,disconnect,完整的代码如下:

xxxx.disconnect()

这里面的xxx指的是某个界面中的某个按钮,感觉这个函数可能能解决问题。。。于是,我再自己的槽函数里面加上了这个代码,注意按钮要跟槽函数对应哈。哈哈,真的解决了问题,真神奇。这个函数就如名字,按钮和槽函数断开链接。

但是,后面又出现了一个问题,我上面是1号界面打开2号界面,然后2号界面打开槽函数,槽函数里面断开后返回一号界面,相当于2打1,如果是1号界面打开槽函数,然后槽函数断开和1号界面的链接,那么就会出现问题了,点击1号界面的按钮,没反应,进不了槽函数。因此,当我们存在1打1的情况,并且需要重新关联槽函数,那么就需要想办法重启1号界面,可以先1界面.close(),槽函数执行完后再1执行另外槽2函数,槽2函数可以将1界面的按钮跟槽函数再次链接起来。

上面是有些绕哈,大家仔细看看,我也是差点被绕晕了。但是还好还好,解决了问题。看有些博客,说的是connect里面有几种跟槽函数自动链接的模式,默认的链接方式就是一直链接,所以导致上面情况发生,我没找到在pyqt5中的更改链接方式的接口,只能采取上面的方法了。

2021 1.14

ps:又发现一种解决方法,比如现在有个按钮,我们需要在当前界面点击这个按钮有反应,同时再次打开这个界面,再点击这个按钮有反应,我们可以先在这个按钮中所对应的函数中断开链接,然后再链接,如下:

def zzz():
        xxx.disconnect()
        xxx.clicked.connect(zzz)

这里面的xxx代表按钮的名字,自己命名的,zzz代表这个按钮对应的函数.

2021 3.29

  • 14
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值