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

基于wxPython 2.8的TreeListCtrl在Win7打包EXE后崩溃求助

解决wx.gizmos.TreeListCtrl打包后Windows7崩溃问题

核心原因

TreeListCtrl确实依赖系统的COMCTL32.DLL,但你的问题根源是旧版本PyInstaller(2.0)未正确处理该控件的依赖,叠加Windows7上通用控件版本的兼容性冲突——程序打包后加载了旧版COMCTL32,而TreeListCtrl需要6.0版本的控件特性,从而触发访问违例(0xC0000005)。

具体解决办法

1. 强制加载6.0版本的COMCTL32

创建一个应用manifest文件(命名为app.manifest),内容如下:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<dependency>
    <dependentAssembly>
        <assemblyIdentity
            type="win32"
            name="Microsoft.Windows.Common-Controls"
            version="6.0.0.0"
            processorArchitecture="x86"
            publicKeyToken="6595b64144ccf1df"
            language="*"
        />
    </dependentAssembly>
</dependency>
</assembly>

打包时指定这个manifest:

pyinstaller --manifest app.manifest your_script.py

2. 修正PyInstaller打包配置

打开生成的.spec文件,做两处调整:

  • 在Analysis的hiddenimports里添加wx.gizmos,确保控件模块被正确打包;
  • 在EXE部分指定manifest文件。
    示例spec代码片段:
a = Analysis(['your_script.py'],
             hiddenimports=['wx.gizmos'],
             # 保留其他原有配置
             )
pyz = PYZ(a.pure)
exe = EXE(pyz,
          a.scripts,
          a.binaries,
          a.zipfiles,
          a.datas,
          name='your_app.exe',
          manifest='app.manifest',  # 新增该行
          # 保留其他原有配置
          )

然后用spec文件打包:pyinstaller your_script.spec

3. 验证TreeListCtrl节点有效性

确保调用AppendItem时,parent参数是有效的TreeItemId,比如先确认根节点已正确创建:

# 示例初始化代码
self.tree = wx.gizmos.TreeListCtrl(self, wx.ID_ANY)
# 先创建根节点
root = self.tree.AddRoot("Root Node")
# 再给根节点添加子项
item = self.tree.AppendItem(root, "Child Item")

4. 替代方案(若上述方法无效)

如果依赖问题无法解决,可以用wx.TreeCtrl结合自定义列绘制来模拟TreeListCtrl的功能,完全避开wx.gizmos的控件依赖。


内容的提问来源于stack exchange,提问作者semantic-dev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 11:52:44