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

如何为PyInstaller打包的Python程序添加背景及图标图片资源?

PyInstaller打包Tkinter程序时资源文件加载失败的解决方法

问题根源

打包后exe运行时的工作路径和本地开发环境不同,直接用相对路径会找不到文件;另外你的打包命令里图标路径存在笔误(NA Chai.icon应该是DNAChain.ico),这也会导致图标加载失败。

解决方案一:修正路径逻辑+手动放置资源

修改代码,让程序自动适配本地开发和打包后的运行环境,获取正确的资源路径:

  1. 在代码中添加资源路径获取函数:
import sys
import os
from tkinter import Tk, Label, PhotoImage

def resource_path(relative_path):
    try:
        # PyInstaller打包后会把资源放在临时目录sys._MEIPASS下
        base_path = sys._MEIPASS
    except Exception:
        # 本地开发时使用当前脚本所在目录
        base_path = os.path.abspath(".")
    return os.path.join(base_path, relative_path)
  1. 修改资源加载代码,用上面的函数获取路径:
window = Tk()

# 加载背景图
bg = PhotoImage(file=resource_path("DNA.png"))
label1 = Label(window, image=bg)
label1.place(x=0, y=0)

# 设置窗口图标
window.iconbitmap(resource_path("DNAChain.ico"))

window.mainloop()
  1. 重新打包(注意修正图标路径):
D:\Python>pyinstaller --noconsole project.py --icon=D:\Python\DNAChain.ico
  1. 打包完成后,将DNA.png和DNAChain.ico复制到dist\project文件夹中(和生成的exe同目录),再运行exe即可。

解决方案二:将资源打包进exe(无需手动复制文件)

如果不想每次都手动复制资源,可以通过PyInstaller的spec文件把资源打包进exe:

  1. 生成spec文件:
D:\Python>pyinstaller --noconsole project.py --icon=D:\Python\DNAChain.ico --name MyApp

执行后会生成MyApp.spec文件。

  1. 编辑MyApp.spec,在datas列表中添加资源文件:
a = Analysis(
    ['project.py'],
    pathex=[],
    binaries=[],
    # 格式:(源文件路径, 打包后资源存放的相对路径),这里设置为当前目录
    datas=[('D:\\Python\\DNA.png', '.'), ('D:\\Python\\DNAChain.ico', '.')],
    hiddenimports=[],
    hookspath=[],
    hooksconfig={},
    runtime_hooks=[],
    excludes=[],
    noarchive=False,
)
# 以下内容保持不变
pyz = PYZ(a.pure)

exe = EXE(
    pyz,
    a.scripts,
    a.binaries,
    a.datas,
    [],
    name='MyApp',
    debug=False,
    bootloader_ignore_signals=False,
    strip=False,
    upx=True,
    upx_exclude=[],
    runtime_tmpdir=None,
    console=False,
    disable_windowed_traceback=False,
    argv_emulation=False,
    target_arch=None,
    codesign_identity=None,
    entitlements_file=None,
    icon='D:\\Python\\DNAChain.ico'
)
  1. 用spec文件重新打包:
D:\Python>pyinstaller MyApp.spec

打包完成后,直接运行dist\MyApp\MyApp.exe即可,无需额外复制资源文件。

内容的提问来源于stack exchange,提问作者Mr. Iluminat

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 04:36:19