Python Tkinter如何设置根窗口图标 解决Linux环境下显示及报错问题
Tkinter根窗口图标规格要求(Linux环境)
- 尺寸:推荐提供16x16、32x32、48x48三种常规尺寸,单张使用的话优先选32x32或48x48,最大不要超过256x256,过大会导致显示异常
- 格式:仅支持PNG、GIF、PPM/PGM格式,原生不支持ICO格式
- 分辨率:常规72DPI即可,无需过高分辨率
报错&显示异常原因
- 加载ICO文件报错:原生Tkinter的
PhotoImage类不识别ICO格式,直接传入ICO文件必然抛出tkinter.TclError: couldn't recognize data in image file错误 - PNG/GIF仅任务栏显示、窗口标题栏不显示:你用的
iconbitmap是针对Windows平台设计的接口,Linux桌面环境(GNOME/KDE/Xfce等)对该接口的适配极差,大部分场景下仅能触发任务栏图标更新,不会同步更新窗口标题栏图标
Linux环境下正确设置方式
使用wm_iconphoto接口传入PNG/GIF格式的图标即可,支持同时传入多个尺寸的图标,系统会自动匹配不同场景下的最优显示尺寸:
from tkinter import * root = Tk() root.geometry('400x400') # 第一个参数为True表示该图标会应用到所有后续创建的子窗口 # 按从小到大顺序传入不同尺寸的PNG图标即可 small_icon = PhotoImage(file="icon_16x16.png") medium_icon = PhotoImage(file="icon_32x32.png") large_icon = PhotoImage(file="icon_48x48.png") root.wm_iconphoto(True, small_icon, medium_icon, large_icon) root.mainloop()
额外注意事项
- 如果只有单张图标,直接传入单张
PhotoImage实例即可,优先使用32x32尺寸的PNG文件 - 图标文件路径要确保正确,相对路径是相对于脚本运行时的工作目录,出现读取异常时建议替换为绝对路径测试
内容的提问来源于stack exchange,提问作者Milind Khobragade
相关产品推荐
相关产品推荐

