I am trying to open a QDialog from a QMainWindow, and after closing the `QDialog, if I need to open it again, it has to open and show the same information that had when I close it. Here is the code of the QMainWindow: class A (QMainWindow): def __init__(self): QMainWindow.__init__(self) #I create a QPushButton to open the QDialog self.axes1 = self.figure_canvas.figure.add_axes ([0.8, 0.01, 0.19, 0.05]) self.button = QPushButton(self.axes1,"Open Dialog") self.button.on_clicked(self.OpenDialog) #This is the method to open the QDialog which is in another module def OpenDialog(self, event): text = configurePort.ConfigurePort.retrieve_data(self) print text What this code does is create a button in my QMainWindow and when I click it, it opens a QDialog, which is created in another module. And this is the code of the QDialog: class ConfigurePort(QDialog): def __init__(self, parent = None): QDialog.__init__(self, parent) uic.loadUi("configurePort.ui", self) #I create a button to check active ports and show them self.connect(self.btn_checkconn, SIGNAL("clicked()"), self.check_ports) #This method calls another class which opens another QDialog #and I select the port that I want def check_ports(self): self.check_serial = CheckPorts(self) self.check_serial.exec_() #After selecting the port, when I close the QDialog of the class named above #the port´s name appears in the first QDialog @classmethod def retrieve_data(cls, parent = None): dlg = cls(parent) dlg.exec_() text = dlg.getPortText() return text def closeEvent(self, event): #Here is where I need to write the code to close the QDialog #and it does not has to be an event In the method, closeEvent, I need to write the necessary code, so I can close the window, and using the same button that I use to open it, open it again with the last information that it showed when I closed it. I have tried to use QSettings but it did not worked (maybe I used it wrong). And I tried the show() and hide() classes of PyQt too, but it did not work. Hope you can help me. ----- EDIT ----- I edited the code of above. and I added some methods for a better understanding. So, I open the QDialog called ConfigurePort and it shows this: The red circle, surrounds the port´s name. It is shown in a QLabel,and I take this text from the QDialog and then print it when I close the QDialog. I accomplish this thanks to a question I asked before, which is in this link: Getting data from child using PyQt The check_port method shown in the code above, opens another QDialog that works great. With this I can select the ports that I need in my pc. So, this does not matter. So, after closing the QDialog(and selecting for example "COM3", as you can see in the picture), I need to open it again, and see the same information that was shown before I closed it. I tried to add this lines, using QSettings: self.settings = QSettings("MyCompany", "MyApp") if not self.settings.value("windowsState") == None: self.restoreState(self.settings.value("windowState")) But as I said before, I think that I did not use it right, but I hope that I solve this using something simpler. ----- EDIT 2 ----- Thank to the help of @Brendan Abel I have this code: class ConfigurePort(QDialog): def __init__(self, parent): super(ConfigurePort, self).__init__(parent) uic.loadUi("configurePort.ui", self) self.myValue = 10 self.restoreSettings() self.connect(self.btn_checkconn, SIGNAL("clicked()"), self.check_ports) self.buttonBox.button(QDialogButtonBox.Cancel).clicked.connect(self.close) self.buttonBox.button(QDialogButtonBox.Ok).clicked.connect(self.closeEvent) self.iniUi() def check_ports(self): pass def iniUi(self): pass #I just create some QLabels in here @classmethod def retrieve_data(cls, parent = None): dlg = cls(parent) dlg.exec_() text = dlg.getPortText() return text def closeEvent(self, event): self.saveSettings() super(QDialog,self).closeEvent(event) def saveSettings(self): settings = QSettings("MyOrg", "MyApp") settings.setValue("myValue", self.myValue) def restoreSettings(self): settings = QSettings("MyOrg", "MyApp") self.myValue = settings.value("myValue", self.myValue) This gives me this error: TypeError: QWidget.closeEvent(QCloseEvent): argument 1 has unexpected type 'bool' I know that I am missing something, but I can not see it. Continue reading...