PytoExe打包Tkinter条码程序Windows下生成0字节空图片问题
问题根因
你遇到的0字节空文件问题,核心原因是python-barcode库(提供Code128、EAN13能力的依赖包)在生成图片格式条形码时,需要加载内置的默认字体文件渲染条码下方的数字/字符。使用打包工具打包时,工具不会自动收集这个库存放在安装目录下的字体资源,打包后的程序运行时找不到字体文件,写入图片流程静默失败,就会生成命名正确但大小为0的空文件。
二维码生成不需要加载额外字体资源,所以打包后可以正常运行。你在PyCharm中直接运行脚本时,能从本地Python环境的site-packages目录下读取到对应字体文件,因此不会出现问题。
修复方案
- 方案1:打包时手动添加条形码库的字体资源
找到你本地Python环境中barcode包的安装位置,一般路径为Python安装目录/Lib/site-packages/barcode/,将该目录下的fonts文件夹整体作为附加资源加入打包命令。
如果你用PyInstaller,打包命令参考如下:
注意Windows系统下路径分隔用分号,Linux/macOS用冒号。pyinstaller --add-data "C:\Path\To\Your\Python\Lib\site-packages\barcode\fonts;barcode/fonts" your_script.py - 方案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
相关产品推荐
相关产品推荐

