关闭QMainWindow的正确方法

Seb*_*llo 5 python pyqt pyqt5

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

每次我不得不关闭窗口时,我都会使用该方法self.destroy(),并且有一个很小的机会,当我关闭所有程序并且没有窗口时,解释器仍在运行,我需要手动终止进程,即使在使用sys.exit(app.exec_())

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

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

self.destroy使用或用于pyqt5应用程序更好self.close?有没有更好的办法?

mus*_*nte 6

close()

关闭此小部件。

destroy()

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

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

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

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