python - 关闭 QMainWindow 的正确方法
问题描述
我最近从 tkinter 更改为 Pyqt5,因为我正在 Python 3.7.8 中开发一个半大型应用程序
每次我不得不关闭窗口时,我都会使用该方法self.destroy()
,当我关闭所有程序并且没有窗口时,解释器仍在运行,我需要手动终止进程,即使使用sys.exit(app.exec_())
我可以让程序运行 15 秒或 30 分钟,这完全是随机的。
我刚刚看到另一种方法称为self.close()
,所以我self.destroy()
用它替换了 ,但我不确定这是否是预期的做法,或者是否有更好的方法。我仍然需要检查问题是否再次出现。
使用pyqt5 应用程序self.destroy
还是更好?self.close
有没有更好的办法?
解决方案
关闭此小部件。
释放窗口系统资源。[...] 这个函数通常从 QWidget 析构函数中调用。
如果你close()
是小部件,如果需要,它可以在以后再次打开/显示,但如果小部件是顶级窗口并且是最后一个可见的窗口,Qt 将自动退出应用程序(假设 QApplication 有quitOnLastWindowClosed()
设置,这是默认设置行为)。在这种情况下,PyQt 将自动销毁窗口并释放内存,这意味着destroy()
无论如何都会调用它。
请注意,如果窗口没有其他引用或父窗口,它也会在关闭时自动销毁:与任何其他 python 对象一样,垃圾收集器将删除窗口小部件及其子窗口,这会导致调用 QWidget 销毁器。
因此,您应该始终调用close()
,因为它确保 Qt 遵循正确的步骤:发送 QCloseEvent(如果需要,可以忽略)并通知应用程序,以便在窗口是最后一个窗口时它可以实际退出。
推荐阅读
- php - Woocommerce webhook 响应 200 消息 Rest API 不可用
- python - 你如何在 tkinter 中制作字体对话框?
- java - Flink OutputTag 可以复用吗?
- python-3.x - 对于这种特殊情况,如何使用地理编码获得公司的正确位置?(Python、谷歌 API)
- python - 如何添加多个熊猫数据框的每个条目。Python
- javascript - 带有 Stripe CardElement 的表单的返回值未定义 React Axios
- powerbi - 百分比的 DAX 阈值度量
- python - VisualStudioCodeCredential.get_token 失败
- python-3.x - 将 functools.partial 和 map 与内置的 getattr 一起使用?
- c# - .Net Core HttpClientFactory 用于多种 API 服务