关闭QMainWindow的正确方法

时间:2020-07-15 07:34:38

标签: python pyqt pyqt5

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

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

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

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

对于pyqt5应用程序,最好使用self.destroyself.close吗? 有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

close()

关闭此小部件。

destroy()

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

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

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

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

相关问题