PyQt: Cómo ocultar QMainWindow

Al hacer clic en el botón Dialog_01 se oculta su ventana y se abre Dialog_02. Al hacer clic en el botón Dialog_02 se deben cerrar sus ventanas y mostrar Dialog_01. ¿Cómo lograrlo?

import sys, os from PyQt4 import QtCore, QtGui class Dialog_02(QtGui.QMainWindow): def __init__(self): super(Dialog_02, self).__init__() myQWidget = QtGui.QWidget() myBoxLayout = QtGui.QVBoxLayout() Button_02 = QtGui.QPushButton("Close THIS and Unhide Dialog 01") Button_02.clicked.connect(self.closeAndReturn) myBoxLayout.addWidget(Button_02) myQWidget.setLayout(myBoxLayout) self.setCentralWidget(myQWidget) self.setWindowTitle('Dialog 02') def closeAndReturn(self): self.close() class Dialog_01(QtGui.QMainWindow): def __init__(self): super(Dialog_01, self).__init__() myQWidget = QtGui.QWidget() myBoxLayout = QtGui.QVBoxLayout() Button_01 = QtGui.QPushButton("Hide THIS and Open Dialog 02") Button_01.clicked.connect(self.callAnotherQMainWindow) myBoxLayout.addWidget(Button_01) myQWidget.setLayout(myBoxLayout) self.setCentralWidget(myQWidget) self.setWindowTitle('Dialog 01') def callAnotherQMainWindow(self): self.hide() self.dialog_02 = Dialog_02() self.dialog_02.show() self.dialog_02.raise_() if __name__ == '__main__': app = QtGui.QApplication(sys.argv) dialog_1 = Dialog_01() dialog_1.show() sys.exit(app.exec_()) 

Haga que la primera ventana sea un padre de la segunda ventana:

 class Dialog_02(QtGui.QMainWindow): def __init__(self, parent): super(Dialog_02, self).__init__(parent) # ensure this window gets garbage-collected when closed self.setAttribute(QtCore.Qt.WA_DeleteOnClose) ... def closeAndReturn(self): self.close() self.parent().show() class Dialog_01(QtGui.QMainWindow): ... def callAnotherQMainWindow(self): self.hide() self.dialog_02 = Dialog_02(self) self.dialog_02.show() 

Si desea que se muestre el mismo diálogo cada vez, haga algo como:

  def callAnotherQMainWindow(self): self.hide() if not hassattr(self, 'dialog_02'): self.dialog_02 = Dialog_02(self) self.dialog_02.show() 

y hide() la ventana secundaria, en lugar de cerrarla.