Python GUI:退出时清理——关闭 PyQt6 应用程... 笔记

Python GUI:退出时清理——关闭 PyQt6 应用程序时停止线程——如何正确关闭应用程序窗口关闭时的后台线程和工作进程

在 PyQt 应用程序中,由 QThreadPool 或 QThread 管理的后台线程即使主窗口关闭后仍会继续运行,这可能导致应用程序挂起或产生错误。为解决此问题,应在主窗口类中重写 closeEvent 方法。该方法在窗口开始关闭时自动调用,提供了执行清理代码的机会。在 closeEvent 内部,应向所有后台工作线程发出停止执行的信号。对于以 QRunnable 实现的工作线程,这通常涉及设置一个内部标志,供工作线程的 run 方法定期检查。向工作线程发出停止信号后,使用 QThreadPool.waitForDone() 暂停执行,直到池中所有线程完成其任务。这确保不会突然终止任何线程,从而避免潜在问题。最后,调用 event.accept() 以允许窗口正常关闭。此外,务必使用 sys.exit() 包装应用程序的事件循环执行,以确保进程干净终止。此模式确保在应用程序完全退出前,所有后台操作都能优雅地停止。