定时的qmessagebox?

0 投票
1 回答
1303 浏览
提问于 2025-04-18 05:28

我刚开始玩这个,虽然现在不太重要,但还是挺好奇的。有没有办法创建一个定时的消息框?

简单来说,我有一个循环在运行,每次循环之间需要一些时间。我想在每次循环完成后给用户显示一个消息框,这样他们就可以选择是否取消后面的循环。我也不想让用户一直在那儿等着,所以如果过了6秒,消息框就会自动关闭,程序继续运行。

我觉得这可能有点棘手,因为消息框是模态的,会打断脚本的执行。

有没有人有什么想法,能帮我实现这个?

1 个回答

1

正如在这个回答中提到的,你可以通过创建一个QMessageBox的子类来实现,当这个对话框显示出来时,启动一个计时器。这个计时器到时间后会自动关闭这个对话框。

class timedMessageBox(QtGui.QMessageBox):
    def __init__(self, timeout, message):
        super(timedMessageBox, self).__init__()
        self.timeout = timeout
        timeoutMessage = "Closing in {} seconds".format(timeout)
        self.setText('\n'.join((message, timeoutMessage)))

    def showEvent(self, event):
        QtCore.QTimer().singleShot(self.timeout*1000, self.close)
        super(timedMessageBox, self).showEvent(event)

撰写回答