To demonstrate how a MainWindow can be opened/closed from the call-back function of a Dialog. The use case is the SardanaMonitor IVP for CursorApp.
#!/usr/bin/env python # # import sys from PyQt4 import QtCore, QtGui import time i = 0 class mainWindow( QtGui.QMainWindow): def __init__( self, parent): QtGui.QMainWindow.__init__(self, parent) self.b = QtGui.QPushButton("Hello",self) self.b.clicked.connect( self.launch) self.show() def launch( self): print( "calling quit") app.quit() class Dialog(QtGui.QDialog): def __init__(self, parent=None): QtGui.QDialog.__init__(self, parent) b = QtGui.QPushButton("ok",self) self.resize( 100, 100) b.clicked.connect( self.launch) self.mw = None def launch( self): self.timer = QtCore.QTimer( self) self.timer.timeout.connect( self.cb_timer) self.timer.start(0) def cb_timer( self): global i print( "timer function", i) self.timer.start(1000) if i == 5: self.timer.stop() return if self.mw is None: self.mw = mainWindow( self) self.mw.b.setText( "Counter %d" % i) i = i + 1 else: self.mw.close() self.mw = None if __name__ == '__main__': app = QtGui.QApplication(sys.argv) d = Dialog() d.exec_()