将Python脚本转EXE时遇tkinter图标位图错误求助
Tkinter打包exe后图标找不到的解决办法
问题根源
用--onefile参数打包时,PyInstaller会把所有文件打包进单个exe,运行时自动解压到系统临时文件夹。你的代码里直接写window.iconbitmap('totem.ico'),程序运行时会在当前工作目录找文件,而非临时解压目录,所以触发找不到位图的错误。
修复步骤
- 修改脚本中的路径逻辑,让程序既能在未打包时正常运行,也能在打包后定位到图标文件:
import os import sys def get_resource_path(relative_path): try: # 打包后,PyInstaller会设置sys._MEIPASS指向临时解压目录 base_dir = sys._MEIPASS except AttributeError: # 未打包时,用脚本所在的绝对路径 base_dir = os.path.abspath(".") return os.path.join(base_dir, relative_path) # 替换原来的图标设置代码 window.iconbitmap(get_resource_path('totem.ico')) - 重新执行打包命令,你的原命令参数是正确的,直接复用即可:
pyinstaller --onefile --noconsole --clean --icon='totem.ico' --add-data 'totem.ico;.' XPperHR.py - 验证结果:运行打包后的exe,程序会自动通过
get_resource_path函数定位到临时目录里的图标文件,就能正常加载窗口图标了。
额外提醒
- 确认
totem.ico是有效格式的图标文件,避免因文件损坏导致加载失败 - 如果是Linux或macOS环境,
--add-data的分隔符要换成:,比如--add-data 'totem.ico:.
内容的提问来源于stack exchange,提问作者Seby
相关产品推荐
相关产品推荐

