关闭 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.destroy
或self.close
?
有没有更好的办法?
【问题讨论】:
【参考方案1】:close()
:
关闭此小部件。
destroy()
:
释放窗口系统资源。 [...] 该函数通常从 QWidget 析构函数中调用。
如果您close()
小部件,如果需要,它可以稍后再次打开/显示,但是如果小部件是***窗口并且是最后一个可见的一、Qt会自动退出应用程序(假设QApplication设置了quitOnLastWindowClosed()
,这是默认行为)。在这种情况下,PyQt 会自动销毁窗口并释放内存,这意味着无论如何都会调用destroy()
。
请注意,如果窗口没有其他引用或父级,则窗口在关闭时也会自动销毁:与任何其他 python 对象一样,垃圾收集器将删除小部件及其子级,这导致调用 QWidget 销毁器。
因此,您应该始终调用close()
,因为它确保 Qt 遵循正确的步骤:发送 QCloseEvent(如果需要,可以忽略)并通知应用程序,以便它可以实际退出,如果窗口是最后一个。
【讨论】:
以上是关于关闭 QMainWindow 的正确方法的主要内容,如果未能解决你的问题,请参考以下文章
在 PyQt 主窗口中处理关闭按钮的正确方法,(红色“X”)
Python:QMainWindow 对话框关闭后如何关闭(或退出)Python 进程