我最近在Python 3.7.8中开发半大型应用程序时,从tkinter更改为Pyqt5
每次必须关闭窗口时,我都使用方法self.destroy()
,当我关闭所有程序且没有窗口时,解释器仍在运行,并且我需要终止该窗口的可能性很小。手动处理,即使使用sys.exit(app.exec_())
我可以让程序运行15秒或30分钟,这完全是随机的。
我刚刚看到了另一种称为self.close()
的方法,所以我用它替换了self.destroy()
,但是我不确定这是预期的做法还是有更好的方法。我仍然必须检查问题是否再次出现。
对于pyqt5应用程序,最好使用self.destroy
或self.close
吗?
有更好的方法吗?
答案 0 :(得分:2)
关闭此小部件。
释放窗口系统资源。 [...] 通常从QWidget析构函数调用此函数。
如果您close()
小部件,可以在以后根据需要打开/再次显示它,但是,如果小部件是顶级窗口而是最后一个可见的Qt将自动退出应用程序(假设QApplication设置了quitOnLastWindowClosed()
,这是默认行为)。在这种情况下,PyQt将自动破坏窗口并释放内存,这意味着无论如何都将调用destroy()
。
请注意,如果没有其他引用或父窗口,则该窗口在关闭时也会被自动销毁:与其他任何python对象一样,垃圾收集器会删除该窗口小部件及其子级,导致调用QWidget destroyer。
因此,您应该始终调用close()
,因为它可以确保Qt遵循正确的步骤:发送QCloseEvent(如果需要,可以将其忽略)并通知应用程序,以便它实际上可以退出如果窗口是最后一个窗口。