QMessageBox 在选择后不会自行销毁?
QMessageBox does not destroy itself after selection?
我有一个 运行ning 线程和一个 'stop thread' 按钮,单击该按钮会调用调用线程的 terminate() 的方法。我有一个 QMessage Box,它在终止之前确认停止按钮。功能符合预期,但如果我再次启动线程并单击关闭按钮,则会收到确认消息框,然后我 select 确认并且线程停止但会出现另一个确认框。它以这种方式继续 - 如果我 运行 它 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
我希望每次使用按钮启动然后停止线程时都会出现一个确认框,并且在 selecting 'Yes' 时线程将终止。实际上,线程终止了,但我得到多个 MessageBox 一个接一个地出现 - 它们的数量对应于我启动线程的次数。
解决了 - 这是因为我将 stop_button 连接到我用来启动线程的函数中上面概述的函数。因此,每次我启动一个线程时,我都会再次连接它并额外调用该函数。我不知道的是,您可以将按钮多次连接到一个功能(或多个功能),但您每天都会学到一些新东西。
为了解决这个问题,我将停止按钮与 stop_thread 功能的连接移到了主 class 上,现在效果很好。
我有一个 运行ning 线程和一个 'stop thread' 按钮,单击该按钮会调用调用线程的 terminate() 的方法。我有一个 QMessage Box,它在终止之前确认停止按钮。功能符合预期,但如果我再次启动线程并单击关闭按钮,则会收到确认消息框,然后我 select 确认并且线程停止但会出现另一个确认框。它以这种方式继续 - 如果我 运行 它 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
我希望每次使用按钮启动然后停止线程时都会出现一个确认框,并且在 selecting 'Yes' 时线程将终止。实际上,线程终止了,但我得到多个 MessageBox 一个接一个地出现 - 它们的数量对应于我启动线程的次数。
解决了 - 这是因为我将 stop_button 连接到我用来启动线程的函数中上面概述的函数。因此,每次我启动一个线程时,我都会再次连接它并额外调用该函数。我不知道的是,您可以将按钮多次连接到一个功能(或多个功能),但您每天都会学到一些新东西。
为了解决这个问题,我将停止按钮与 stop_thread 功能的连接移到了主 class 上,现在效果很好。