pyqt:messagebox几秒钟后自动关闭

时间:2016-12-02 12:49:39

标签: python pyqt pyqt4 pyqt5 qmessagebox

我正在尝试做一个警告信息框,几秒后自动消失。 我已经完成了这段代码:

(!(primaryGroupID= 512)) 

对于自动关闭部分,它实际上很好。 我的问题是,当有人试图在几秒钟之前手动关闭它,通过单击窗口的x按钮,消息框永远不会关闭。等待的时间"消极,消息框显示"在-4秒内自动关闭"例如,它永远不会关闭。

知道如何避免这种情况吗? 此致

1 个答案:

答案 0 :(得分:4)

试试我的解决方案, 我已根据您的要求创建了一种新类型的QMessageBox

import sys
from PyQt4 import QtCore
from PyQt4 import QtGui


class TimerMessageBox(QtGui.QMessageBox):
    def __init__(self, timeout=3, parent=None):
        super(TimerMessageBox, self).__init__(parent)
        self.setWindowTitle("wait")
        self.time_to_wait = timeout
        self.setText("wait (closing automatically in {0} secondes.)".format(timeout))
        self.setStandardButtons(QtGui.QMessageBox.NoButton)
        self.timer = QtCore.QTimer(self)
        self.timer.setInterval(1000)
        self.timer.timeout.connect(self.changeContent)
        self.timer.start()

    def changeContent(self):
        self.setText("wait (closing automatically in {0} secondes.)".format(self.time_to_wait))
        self.time_to_wait -= 1
        if self.time_to_wait <= 0:
            self.close()

    def closeEvent(self, event):
        self.timer.stop()
        event.accept()


class Example(QtGui.QWidget):
    def __init__(self):
        super(Example, self).__init__()
        btn = QtGui.QPushButton('Button', self)
        btn.resize(btn.sizeHint())
        btn.move(50, 50)
        self.setWindowTitle('Example')
        btn.clicked.connect(self.warning)

    def warning(self):
        messagebox = TimerMessageBox(5, self)
        messagebox.exec_()


def main():
    app = QtGui.QApplication(sys.argv)
    ex = Example()
    ex.show()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()