python一键打包后的窗体图标、任务栏图标不变,解决方案 溯光笔记实测记录

温馨提示:
公众号:溯光笔记 本站仅为个人兴趣爱好而创立 并不会收费,感谢大家的支持.如有冒犯请联系我.

今天才发现 用一键打包工具 打包出来的软件 只有exe的图标是变了,可软件里面的图标和任务栏的图标是没有变的。就尝试研究了一下 。貌似有好几种方案,如果选择自己准备资源文件的方式打包工具就无法用了,毕竟打包工具 他只有提交一个py文件 ,并没有支持多个文件打包。所以溯光这里记录的 还是走单文件打包的方式解决图标问题。

 

  • 不生成临时文件,避免打包后读取失败
  • 不需要安装 PIL/Pillow,兼容性更好
  • 保留 Windows 任务栏图标修复
  • 加了异常捕获,没有图标也不影响软件启动
import tkinter as tk
import sys
import base64
import ctypes
import os

# ICO base64 保持不变
ICO_BASE64 = """
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
"""

def set_window_icon(root):
    try:
        print("开始加载窗口图标...")
        ico_data = base64.b64decode(ICO_BASE64)
        # 直接生成在当前脚本目录,简化路径,规避打包路径bug
        temp_ico_path = "temp_icon.ico"
        with open(temp_ico_path, "wb") as f:
            f.write(ico_data)
        print("临时ICO文件写入完成")

        # 核心:写入文件立刻调用设置,不加任何延时删除
        root.iconbitmap(temp_ico_path)
        print("图标设置命令执行完毕")

    except Exception as err:
        print("图标加载异常 >>>", err)

# Windows任务栏标识修复(只对打包exe生效)
if sys.platform == "win32":
    try:
        ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID("suguang.ai.helper.10")
        print("任务栏ID设置成功")
    except Exception as e:
        print("任务栏ID设置失败", e)

 

找到的第一个方法  把图标转换成base64 再进行调用 。貌似不好用。这个直接放弃 。还是再选一个方案 。

提示第一个方法用二手可以的  算了 暂时先不研究了  我们直接用第二个方式算了  ,

 

 

成功了  ,这种方式比较简洁一点  直接搞个固定的app.ico图标  文件名一样,让软件自动读取这个图标作为软件的图标使用,麻烦就是每次打包出来的软件,你需要单独把这个图标放进去,注意不要修改名称。

 

          【图标工具代码】→ 粘贴到文件最上方 import 区域(保留不动)

import tkinter as tk
import sys
import ctypes
import os

# ===================== 图标加载函数 =====================
def get_resource_path():
    """自动兼容 直接运行py / 打包exe后的路径"""
    if getattr(sys, 'frozen', False):
        # 打包成exe模式
        base_path = os.path.dirname(sys.executable)
    else:
        # 直接运行py脚本模式
        base_path = os.path.dirname(os.path.abspath(__file__))
    return base_path

def set_window_icon(root):
    base = get_resource_path()
    icon_file = os.path.join(base, "app.ico")
    try:
        if os.path.exists(icon_file):
            root.iconbitmap(icon_file)
            print("✅ 窗口图标加载成功:", icon_file)
        else:
            print("❌ 找不到app.ico 文件,路径:", icon_file)
    except Exception as err:
        print("❌ 设置图标发生错误:", str(err))

# Windows任务栏图标修复(打包exe生效)
if sys.platform == "win32":
    try:
        ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID("suguang.ai.helper.10")
    except:
        pass
# =======================================================

注意第二段的调用代码 ,不要直接替换 ,修改一下即可

只修改你原有程序的启动入口,不要覆盖原有代码!

找到你软件原本这一段(你原本就有的)

if __name__ == "__main__":
    root = tk.Tk()
    # ↓↓↓ 只在这里【新增一行】调用图标函数,别的代码一丝不动!↓↓↓
    set_window_icon(root)

    # 下面全部保留你原来所有代码:标题、布局、按钮、框架等等
    root.title("溯光笔记-AI聚合快捷助手 1.0")
    # 你所有的界面创建代码(Frame/按钮/功能逻辑全部保留)

    root.mainloop()

记录到此结束 。

THE END