Python/PyQt5修改字典数据后QPushButton setEnabled(False)失效问题
问题根因
你代码里的问题出在onButtonClick方法中这行多余的绑定逻辑:
self.serversChecked.amount_of_servers.connect(self.setupUi)
Worker线程的run方法执行时,第一时间就会发射amount_of_servers信号,这个信号会触发setupUi重新执行:
setupUi会重新创建所有控件,包括countBtn按钮- 你之前执行的
self.countBtn.setEnabled(False)是作用在旧的按钮实例上的,新创建的按钮默认处于启用状态,所以看起来禁用功能失效了。你额外加的disableButton测试函数没生效也是同样的原因:触发start_long_task信号时setupUi已经重建了按钮,之前绑定的槽函数作用的也是旧的按钮实例。
解决方法
直接删掉那行绑定setupUi的代码即可。setupUi只需要在窗口初始化的时候执行一次,不需要每次点击按钮都重新构建一次界面。
另外建议补充一个优化点:每次点击按钮都会给Worker的信号绑定新的槽函数,建议每次用完Worker之后断开旧的信号连接,避免槽函数重复执行。
内容的提问来源于stack exchange,提问作者Gregory Sky
相关产品推荐
相关产品推荐

