1 回答
TA贡献1735条经验 获得超5个赞
问题是当你ret = msgBox.exec_()在构造函数执行完之前put 时,窗口对象还没有完成构建,所以没有什么可以关闭的,所以当对话框关闭时,刚刚打开的窗口将显示出来。我完成建造。我们的想法是完成窗口的构建然后调用ret = msgBox.exec_(),为此我们将使用QTimer.singleShot().
另一方面,该closeEvent方法不是必需的,因为我正在尝试这样做。恕我直言是self.errWin2Timer从内存中消除(尽管似乎有一个错字,因为你使用errWin2而不是errWin2Timer)但是作为窗口的儿子是没有必要的,因为在Qt中,如果父母死了,孩子们也会死。
from PyQt4 import QtCore,QtGui
class ErrorWindow2(QtGui.QWidget):
def __init__( self ):
super(ErrorWindow2, self).__init__(None, QtCore.Qt.WindowStaysOnTopHint)
self.errWin2Timer = QtCore.QTimer(self,
interval=10*1000,
singleShot=True,
timeout=self.close)
self.errWin2Timer.start()
QtCore.QTimer.singleShot(0, self.showMessageBox)
def showMessageBox(self):
msgBox = QtGui.QMessageBox(self)
msgBox.move (500,500)
msgBox.setIcon(QtGui.QMessageBox.Critical)
msgBox.setText("Test 2")
ret = msgBox.exec_()
if ret == QtGui.QMessageBox.Ok:
print("OK")
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
w = ErrorWindow2()
w.show()
sys.exit(app.exec_())
添加回答
举报