2017-06-29 4 views
0

sagen Lets Ich habe 2 Fenster, von denen einer auf einem Menüpunkt klicken um die andere öffnet:pyqt Prüfung wenn andere Fenster geschlossen

class ProjectWindow(QtWidgets.QMainWindow, project_window_qt.Ui_ProjectWindow): 
    def __init__(self): 
     super(ProjectWindow, self).__init__() 

     # Setup the main window UI 
     self.setupUi(self) 
     self.new_project_window = None 

     # Handle menu bar item click events 
     self.actionNewProject.triggered.connect(self.new_project) 

    def new_project(self): 
     self.new_project_window = project_new_window.NewProjectWindow() 
     self.new_project_window.show() 

    def refresh_projects(self): 
     with open(os.path.join(self.directory, 'projects.txt'), 'r') as f: 
      projects = json.load(f) 

     return projects 

und

class NewProjectWindow(QtWidgets.QDialog, project_new_window_qt.Ui_NewProjectWindow): 
    def __init__(self,): 
     super(NewProjectWindow, self).__init__() 

     # Setup the main window UI 
     self.setupUi(self) 

Sobald der Benutzer schließt new_project_window, Ich möchte die refresh_projects-Methode in der ProjectWindow Klasse aufgerufen werden.

Ich dachte über ein Ereignis-Listener Einrichtung zu überprüfen, wenn new_project_window geschlossen ist, und refresh_projects rufen Sie dann einmal das passiert, aber das Fenster gerade schließt unmittelbar nachdem sie öffnet:

def new_project(self): 
    self.new_project_window = project_new_window.NewProjectWindow(self.directory, self.project_list) 
    self.new_project_window.onClose.connect(self.refresh_projects) 
    self.new_project_window.show() 

Ist das der richtige Ansatz? Oder gibt es eine Möglichkeit, refresh_projects direkt aus dem Objekt new_project_window aufzurufen?

+0

was ist onClose? – eyllanesc

Antwort

0

Wenn Sie QDialog verwenden, sollten Sie exec_() anstelle von show() aufrufen, dies wird einen Wert zurückgeben, wenn der Benutzer das Fenster schließt, und nur aktualisieren Projekt aufrufen.

def new_project(self): 
    self.new_project_window = project_new_window.NewProjectWindow(self.directory, self.project_list) 
    code = self.new_project_window.exec_() 
    """code: gets the value of the QDialog.Accepted, or QDialog.Rejected 
    that you can connect it to some accept button 
    using the accept() and reject() functions. 
    """ 
    self.refresh_projects() 

exec_() blockiert, das heißt die nächste Zeile, es sei denn nicht ausgeführt wird, die QDialog geschlossen wurde.

Verwandte Themen