处理 closeEvent 接受/忽略

Posted

技术标签:

【中文标题】处理 closeEvent 接受/忽略【英文标题】:Handling closeEvent accept/ignore 【发布时间】:2015-01-21 04:29:07 【问题描述】:

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

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

我正在这样做:

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

如果用户关闭它,窗口会重新创建,但当他单击接受按钮时它不会关闭。

【问题讨论】:

另外,根据您要实现的目标,向导可能会对您有所帮助。它有一个isComplete 方法,可以评估是否允许用户关闭向导(基于一些输入等)。 【参考方案1】:

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

【讨论】:

以上是关于处理 closeEvent 接受/忽略的主要内容,如果未能解决你的问题,请参考以下文章

14事件的接受与忽略

如何接受/忽略 QKeyEvent

有没有办法忽略并接受整理?

在用户关闭一个界面之前检测用户是否已经保存文件需要重写关闭事件。

我们能否通过接受(或忽略)新特性使 ML 模型(pickle 文件)更加健壮?

如何通过忽略每次按键上的无效字符来使文本类型的输入元素只接受一个数值(十进制、正数和负数)?