2015-01-21 72 views
-2

我有一個主窗口彈出第二個窗口與一些用戶選項,用戶可以單擊其中一個選項或關閉這個新的窗口。處理closeEvent接受/忽略

我希望每次用戶關閉窗口以再次彈出窗口,並且只在他選擇一個選項時關閉它。

我這樣做:

class PopUp_Window(QWidget): 
    def __init__(self, parent): 
     self.parent = parent 
     self.accept_button.clicked.connect(lambda: 
             self.closeEvent(event=QCloseEvent, accepted=True)) 

    def closeEvent(self, event, accepted=False): 
     if not accepted: 
      self.parent.recreate_window() 
      event.ignore() 
     else: 
      event.accept() 

窗戶是beign recreat如果用戶關閉它,但是當他點擊接受按鈕不會關閉。

+1

此外,取決於你想要實現嚮導可能會幫助你。它有一個'isComplete'方法,可以評估用戶是否被允許關閉嚮導(基於某些輸入等)。 – 101 2015-01-21 05:20:52

回答

3

我猜accepted總是False那麼。你爲什麼重新開啓彈出窗口?如果你忽視這個事件,它將永遠不會關閉。

你需要lambda函數嗎?如果沒有,像這樣的事情似乎更簡單:

class PopUp_Window(QWidget): 
    def __init__(self, parent): 
     self.parent = parent 
     self.accepted = False 
     self.accept_button.clicked.connect(self.on_accept) 

    def on_accept(self): 
     self.accepted = True 
     self.close() 

    def closeEvent(self, event): 
     if self.accepted: 
      event.accept() 
     else: 
      event.ignore()