PySide6程序退出时Threading Shutdown SystemError原因排查
问题根源分析与解决方案
错误核心根源
这个SystemError本质是Python 3.13的线程底层机制变更,与PySide6的事件循环/线程管理逻辑存在兼容性冲突:
- Python 3.13对
_thread._ThreadHandle的is_done()方法做了底层实现调整,而较旧版本的PySide6未适配这一变更。 - 当Qt事件循环(
app.exec())结束后,Python触发线程清理流程,主线程的_ThreadHandle状态检查抛出未被捕获的异常,最终表现为线程关闭阶段的忽略异常。
你怀疑的UI样式问题也可能间接触发该错误:如果样式加载涉及Qt内部的后台渲染线程,线程生命周期管理在Python 3.13的新机制下出现异常,就会引发这类报错。
验证与可行解决方案
- 降级Python版本:切换到Python 3.12或更早版本,该问题大概率会消失——因为Python 3.13之前的
_thread._ThreadHandle实现无此变更,与PySide6兼容性更稳定。 - 升级PySide6到最新稳定版:Qt官方可能已针对Python 3.13的线程机制更新了PySide6,执行命令升级:
pip install --upgrade pyside6 - 调整事件循环退出逻辑:手动管理对象引用,帮助Python正确回收资源:
import sys from PySide6.QtWidgets import QApplication, QMainWindow from ui.ui import Ui_MainWindow class App(QMainWindow, Ui_MainWindow): def __init__(self): super().__init__() self.setupUi(self) if __name__ == "__main__": app = QApplication(sys.argv) window = App() window.show() exit_code = app.exec() del window # 手动清除窗口引用,避免线程清理时的状态异常 sys.exit(exit_code) - 排查UI样式的线程影响:临时禁用自定义样式(如QSS、第三方主题),若错误消失,说明样式加载存在线程未正确终止的问题:
- 确保所有样式加载操作在主线程执行
- 避免在样式中引用需要异步加载的资源
内容的提问来源于stack exchange,提问作者user27827714
相关产品推荐
相关产品推荐

