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

使用PyInstaller打包CustomTkinter程序时图片无法显示的问题

解决PyInstaller单文件打包CustomTkinter后图片加载失败的问题

这个问题的核心原因是:PyInstaller单文件模式打包时,会把所有程序资源临时解压到系统的临时目录(比如Windows的%temp%\_MEIxxxxxx),而你代码里用的相对路径是基于源码所在目录的,运行exe时这个路径根本不存在,自然会报FileNotFoundError。

下面是具体的解决步骤:

1. 修改代码,动态获取资源路径

在你的代码里添加一个获取资源路径的辅助函数,用来适配打包前后的路径差异:

import sys
import os

def get_resource_path(relative_path):
    # 判断是否是PyInstaller打包后的环境
    if hasattr(sys, '_MEIPASS'):
        return os.path.join(sys._MEIPASS, relative_path)
    # 非打包环境,返回源码目录下的路径
    return os.path.join(os.path.dirname(os.path.abspath(__file__)), relative_path)

然后把原来引用图片的代码替换成用这个函数生成的路径,比如:

from PIL import Image
import customtkinter as ctk

# 替换原来的相对路径写法
light_img_path = get_resource_path("arquivos/logoLight.png")
dark_img_path = get_resource_path("arquivos/logoDark.png")
light_img = Image.open(light_img_path)
dark_img = Image.open(dark_img_path)

# 后续正常使用图片,比如设置组件图片或窗口图标
app = ctk.CTk()
logo = ctk.CTkImage(light_image=light_img, dark_image=dark_img, size=(100,100))
ctk.CTkLabel(app, image=logo, text="").pack()

2. 修改PyInstaller打包命令,指定要打包的资源

你需要告诉PyInstaller把arquivos目录下的图片一起打包进去,在原来的命令基础上添加--add-data参数:

Windows系统

pyinstaller --onefile -w --add-data "arquivos/*.png;arquivos/" app.py

如果要打包整个arquivos目录(包含所有子文件/文件夹),可以用:

pyinstaller --onefile -w --add-data "arquivos;arquivos" app.py

Mac/Linux系统

路径分隔符用冒号:代替分号;:

pyinstaller --onefile -w --add-data "arquivos/*.png:arquivos/" app.py

验证打包结果

重新执行打包命令后,运行生成的exe文件,图片应该就能正常加载了。

内容的提问来源于stack exchange,提问作者Daniel Barreto Miranda

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 16:05:01