关闭 QMainWindow 的正确方法

Posted

技术标签:

【中文标题】关闭 QMainWindow 的正确方法【英文标题】:Correct way to close QMainWindow 【发布时间】:2020-07-15 07:34:38 【问题描述】:

我最近从 tkinter 更改为 Pyqt5,因为我正在 Python 3.7.8 中开发一个半大型应用程序

每次我必须关闭窗口时,我都会使用self.destroy() 方法,当我关闭所有程序并且没有窗口时,解释器仍在运行,我需要手动终止进程。 , 即使使用sys.exit(app.exec_())

我可以让程序运行 15 秒或 30 分钟,这完全是随机的。

我刚刚看到另一种方法称为self.close(),所以我用它替换了self.destroy(),但我不确定这是否是预期的做法或者是否有更好的方法。我还要检查问题是否再次出现。

pyqt5 应用程序最好使用self.destroyself.close? 有没有更好的办法?

【问题讨论】:

【参考方案1】:

close():

关闭此小部件。

destroy():

释放窗口系统资源。 [...] 该函数通常从 QWidget 析构函数中调用。

如果您close() 小部件,如果需要,它可以稍后再次打开/显示,但是如果小部件是***窗口并且是最后一个可见的一、Qt会自动退出应用程序(假设QApplication设置了quitOnLastWindowClosed(),这是默认行为)。在这种情况下,PyQt 会自动销毁窗口并释放内存,这意味着无论如何都会调用destroy()

请注意,如果窗口没有其他引用或父级,则窗口在关闭时也会自动销毁:与任何其他 python 对象一样,垃圾收集器将删除小部件及其子级,这导致调用 QWidget 销毁器。

因此,您应该始终调用close(),因为它确保 Qt 遵循正确的步骤:发送 QCloseEvent(如果需要,可以忽略)并通知应用程序,以便它可以实际退出,如果窗口是最后一个。

【讨论】:

以上是关于关闭 QMainWindow 的正确方法的主要内容,如果未能解决你的问题,请参考以下文章

在 PyQt 主窗口中处理关闭按钮的正确方法,(红色“X”)

Python:QMainWindow 对话框关闭后如何关闭(或退出)Python 进程

Qt QMainWindow 用户关闭和系统中止之间的区别

qt multiple definition of qmain

在Qt中手动设置窗口布局的正确方法

Qt关闭QMainWindow后如何防止崩溃?