【问题标题】:QMessageBox does not destroy itself after selection?QMessageBox 选择后不会自行销毁?
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2021-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-26
    • 1970-01-01
    • 2012-02-15
    • 2015-03-20
    • 2012-12-30
    相关资源
    最近更新 更多