【发布时间】:2019-07-07 10:12:01
【问题描述】:
我有一个正在运行的线程和一个“停止线程”按钮,单击该按钮会调用一个调用该线程的 terminate() 的方法。我有一个 QMessage 框,可以在停止按钮终止之前确认它。功能符合预期,但如果我再次启动线程并单击关闭按钮,然后我会收到确认消息框,然后我选择确认并且线程停止但会出现另一个确认框。它以这种方式继续 - 如果我运行它 3 次,我必须确认三个框,4 我得到 4 等等。第一个框将在所有情况下终止线程。似乎 MessageBox 每次出现时都没有被正确销毁,所以它们只是建立起来了?不知道发生了什么。
见下面的代码。我有一个线程“my_thread”和一个连接到下面概述的函数“stop_thread”的按钮。
def stop_thread(self):
prompt=QWidgets.QMessageBox.question(self, 'Stop!', 'Are you sure you want to stop thread?', QtWidgets.QMessageBox.Yes, QtWidgets.QMessageBox.No)
if prompt == QtWidgets.QMessageBox.Yes:
self.my_thread.terminate()
else:
pass
我希望每次使用按钮启动然后停止线程时,都会出现一个确认框,并且在选择“是”时线程将终止。实际上线程终止了,但我得到多个 MessageBox 一个接一个出现 - 它们的数量对应于我启动线程的次数。
【问题讨论】:
-
请发布一个显示您的问题的最小示例。
标签: python python-3.x pyqt pyqt5 qthread