2015-01-21 174 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()