1 回答

TA貢獻(xiàn)1735條經(jīng)驗(yàn) 獲得超5個贊
問題是當(dāng)你ret = msgBox.exec_()在構(gòu)造函數(shù)執(zhí)行完之前put 時,窗口對象還沒有完成構(gòu)建,所以沒有什么可以關(guān)閉的,所以當(dāng)對話框關(guān)閉時,剛剛打開的窗口將顯示出來。我完成建造。我們的想法是完成窗口的構(gòu)建然后調(diào)用ret = msgBox.exec_(),為此我們將使用QTimer.singleShot().
另一方面,該closeEvent方法不是必需的,因?yàn)槲艺趪L試這樣做。恕我直言是self.errWin2Timer從內(nèi)存中消除(盡管似乎有一個錯字,因?yàn)槟闶褂胑rrWin2而不是errWin2Timer)但是作為窗口的兒子是沒有必要的,因?yàn)樵赒t中,如果父母死了,孩子們也會死。
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_())
添加回答
舉報