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

PyQt5的QTreeView打开含.json/.js文件的文件夹时崩溃

问题分析与解决方案

核心定位

这是VSCode环境与PyQt5文件系统组件的冲突问题:.json/.js是VSCode默认深度关联的文件类型,在VSCode终端运行程序时,PyQt5的QTreeView调用系统文件图标服务时,会触发VSCode的文件关联钩子,进而引发死锁或崩溃;修改扩展名、在VSCode外运行时无此关联干扰,因此程序正常。

可行解决办法

  • 临时禁用VSCode的文件关联插件/图标主题
    切换VSCode图标主题为「None」,或暂时禁用JSON、JavaScript相关的内置插件(比如JSON Language Features、JavaScript and TypeScript Language Features),重启VSCode后再运行程序。
  • 在PyQt中跳过系统图标加载
    给QFileSystemModel设置自定义图标提供者,避免调用系统图标服务:
    from PyQt5.QtWidgets import QFileSystemModel, QTreeView, QApplication, QFileIconProvider
    
    class CustomIconProvider(QFileIconProvider):
        def icon(self, info):
            # 返回统一图标或空图标,不依赖系统图标
            return super().icon(QFileIconProvider.File)
    
    app = QApplication([])
    model = QFileSystemModel()
    model.setIconProvider(CustomIconProvider())
    model.setRootPath("/你的项目根目录路径")
    tree_view = QTreeView()
    tree_view.setModel(model)
    tree_view.show()
    app.exec_()
    
  • 修改VSCode终端的QT环境变量
    在VSCode终端中设置环境变量,强制QT使用独立渲染逻辑:
    export QT_QPA_PLATFORM=xcb
    python 你的程序脚本.py
    
  • 改用外部终端运行程序
    在VSCode设置中搜索terminal.external.linuxExec,设置为系统默认终端(如gnome-terminal),运行程序时选择「在外部终端中运行」,绕开VSCode内部环境的冲突。

补充说明

设置QT_DEBUG_PLUGINS=1无日志输出,是因为崩溃发生在VSCode进程上下文的冲突中,而非QT插件加载阶段,因此无法捕获插件调试信息。

内容的提问来源于stack exchange,提问作者F0AX

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 17:54:56