539 字
3 分钟
CustomTkinter添加图标以及Pyinstaller打包
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.py2. 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打包/ 部分信息可能已经过时