选择后QMessageBox不会破坏自身吗?

时间:2019-02-13 14:26:26

标签: python python-3.x pyqt pyqt5 qthread

我有一个正在运行的线程和一个“停止线程”按钮,当单击该按钮时,它会调用一个方法,该方法调用该线程的terminate()。我有一个QMessage Box,它在终止之前确认停止按钮。功能符合预期,但是如果我再次启动线程并单击关闭按钮,则得到确认MessageBox,然后选择确认,线程停止,但出现另一个确认框。它以这种方式继续-如果我运行了3次,我必须确认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,它们的数量与我启动该线程的次数相对应。

1 个答案:

答案 0 :(得分:0)

解决了它-这是因为我将stop_button连接到了我用来启动线程的函数中的上述函数。因此,每次启动线程时,我都会再次连接该线程,并额外调用该函数。我不知道的是您可以多次将按钮连接到一个功能(或多个功能),但是您每天都会学到一些新知识。

要解决此问题,我将停止按钮与stop_thread函数的连接移至了主类,现在效果很好。