You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 11:25:55