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

PytoExe打包Tkinter条码程序Windows下生成0字节空图片问题

问题根因

你遇到的0字节空文件问题,核心原因是python-barcode库(提供Code128、EAN13能力的依赖包)在生成图片格式条形码时,需要加载内置的默认字体文件渲染条码下方的数字/字符。使用打包工具打包时,工具不会自动收集这个库存放在安装目录下的字体资源,打包后的程序运行时找不到字体文件,写入图片流程静默失败,就会生成命名正确但大小为0的空文件。
二维码生成不需要加载额外字体资源,所以打包后可以正常运行。你在PyCharm中直接运行脚本时,能从本地Python环境的site-packages目录下读取到对应字体文件,因此不会出现问题。

修复方案
  • 方案1:打包时手动添加条形码库的字体资源
    找到你本地Python环境中barcode包的安装位置,一般路径为Python安装目录/Lib/site-packages/barcode/,将该目录下的fonts文件夹整体作为附加资源加入打包命令。
    如果你用PyInstaller,打包命令参考如下:
    pyinstaller --add-data "C:\Path\To\Your\Python\Lib\site-packages\barcode\fonts;barcode/fonts" your_script.py
    
    注意Windows系统下路径分隔用分号,Linux/macOS用冒号。
  • 方案2:生成条码时显式指定系统存在的字体路径
    跳过库的默认字体加载逻辑,直接指定Windows系统自带的字体,避免资源找不到的问题,修改生成条码的代码如下:
    import qrcode
    from pathlib import Path
    from barcode import Code128, EAN13
    from barcode.writer import ImageWriter
    
    def creer_barrecode():
        number = entryMonUrl.get().strip()
        desktop_path = str(Path.home() / "Desktop")
        fila = desktop_path + '/bar_code.png'
        if number:
            write_options = {
                # 指定Windows系统自带的Arial字体,不需要额外依赖库内资源
                "font_path": "C:/Windows/Fonts/arial.ttf"
            }
            with open(fila, 'wb') as f:
                Code128(number, writer=ImageWriter()).write(f, options=write_options)
    
  • 补充排查:如果上述操作后仍有问题,可以在打包命令中加-c参数保留控制台窗口,运行exe时查看具体报错信息,优先排除桌面路径写入权限、输入内容不符合条码编码规则(比如EAN13要求输入必须是12/13位纯数字)的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 12:57:13