2017-06-29 8 views
0

私は、メニュー項目のクリックで他のを開く一つは2つの窓、考えてみましょう:ユーザーがnew_project_windowを閉じると、PyQtはチェック他のウィンドウを閉じたときに

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 

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) 

を私はrefresh_projectsメソッドをProjectWindowクラスで呼びたいと思っています。

私はnew_project_windowを閉じたときに確認し、それが起こる一度refresh_projectsを呼び出すためにイベントリスナーを設定について思ったが、窓はそれが開いた直後に閉じ:

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() 

は正しいアプローチですか?または、new_project_windowオブジェクトから直接refresh_projectsに電話する方法はありますか?

+0

oncloseは何ですか? – eyllanesc

答えて

0

QDialogを使用している場合は、show()ではなくexec_()を呼び出す必要があります。これは、ユーザーがウィンドウを閉じたときに値を返し、プロジェクトを更新するだけです。

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_()QDialogが閉鎖されていない限り、次の行が実行されていない。すなわち、ブロックしています。

関連する問題