Mobile wallpaper 1
539 字
3 分钟
CustomTkinter添加图标以及Pyinstaller打包
2025-12-19

CustomTkinter中添加图标#

在 CustomTkinter 中设置窗口图标,可以根据是否想引入第三方依赖库选择以下两种方式:

方式一:使用 tkinter 内置 PhotoImage(通用、无需额外装包)#

适用于标准的 .png.gif 图标,现代 Python 3 环境下无需安装额外图像库。

import tkinter as tk
# 获取图标文件路径(支持打包后从资源中读取)
icon_path = resource_path('icon.png')
try:
# 创建 PhotoImage 对象
iconpath = tk.PhotoImage(file=icon_path)
# 先调用 wm_iconbitmap 进行初始化
root.wm_iconbitmap()
# 再设置 iconphoto
root.iconphoto(False, self.iconpath)
except Exception as e:
# 如果无法加载图标,使用默认设置
print(f"设置图标时发生错误:{e}")

方式二:使用 PIL 库的 ImageTk(需安装 Pillow)#

如果图标涉及复杂的格式转换或需要利用 Pillow 库处理图像,可以使用此方式,如 .ico

from PIL import ImageTk # 需提前执行 pip install pillow
# 获取图标文件路径(支持打包后从资源中读取)
icon_path = resource_path('icon.png')
try:
# 创建 PhotoImage 对象
iconpath = ImageTk.PhotoImage(file=icon_path)
# 先调用 wm_iconbitmap 进行初始化
root.wm_iconbitmap()
# 再设置 iconphoto
root.iconphoto(False, self.iconpath)
except Exception as e:
# 如果无法加载图标,使用默认设置
print(f"设置图标时发生错误:{e}")

Pyinstaller打包#

打包单文件时,需要将 icon.png 资源一起打包。

1. 命令行打包参数#

终端运行时添加 --add-data="资源路径;打包里的路径"

pyinstaller --onefile --icon=favicon.ico --add-data="favicon.ico;." --add-data="icon.png;." main.py

2. Spec 文件配置#

如果你使用 .spec 文件构建,可以在 datas=[ ] 槽位中添加(左边是本地资源路径,右边是释放到打包里的相对路径):

datas=[('favicon.ico', '.'), ('icon.png', '.')],

3. 代码内路径动态转换#

在 Pyinstaller 打包机制中,运行打包后的 .exe 文件时,系统会自动将内部资源释放到系统的临时文件夹中。

因此,代码中必须利用 sys._MEIPASS 来动态获取该临时文件夹的绝对路径:

def resource_path(self, relative_path):
"""获取资源的绝对路径,用于支持 PyInstaller 打包后的资源访问"""
try:
# PyInstaller 创建临时文件夹,并将路径存储在 _MEIPASS 中
base_path = sys._MEIPASS
except Exception:
base_path = os.path.abspath(".")
return os.path.join(base_path, relative_path)

分享

如果这篇文章对你有帮助,欢迎分享给更多人!

CustomTkinter添加图标以及Pyinstaller打包
https://blog.nth2miss.cn/posts/customtkinter添加图标以及pyinstaller打包/
作者
Nth2Miss
发布于
2025-12-19
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时

封面
Sample Song
Sample Artist
封面
Sample Song
Sample Artist
0:00 / 0:00