处理closeEvent接受/忽略

时间:2015-01-21 04:29:07

标签: python qt event-handling pyqt pyside

我有一个主窗口弹出第二个窗口,其中包含一些用户选项,用户可以单击其中一个选项或关闭这个新窗口。

我希望每次用户关闭窗口再次弹出窗口时,只有在他选择一个选项时才关闭它。

我这样做:

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

如果用户关闭窗口,窗口会重新开始,但是当他点击接受按钮时窗口不会关闭。

1 个答案:

答案 0 :(得分: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()