适配Python3项目时Tkinter相对路径加载图标失败的问题及解决
解决Python3中Tkinter无法加载相对路径图标的问题
刚碰到过一模一样的坑!把一个Python2的Tkinter项目适配到Python3时,原代码里的root.iconbitmap('icons/pypad.ico')怎么都加载不出图标——路径反复确认过是对的,但就是没效果。后来试了两种可行的解决方案:
方案一:拼接绝对路径
通过把相对路径转成绝对路径的方式绕开路径解析问题,定义一个简单的路径拼接函数就行:
import os def rcpath(rel_path): return os.path.join(os.getcwd(), rel_path) # 调用设置图标 root.iconbitmap(rcpath('icons/pypad.ico'))
这种方法直接解决了Python3下相对路径的解析问题,亲测能正常加载ico格式图标。
方案二:使用PhotoImage配合wm iconphoto命令
如果想追求更好的跨版本兼容性(Python2和Python3都能用),可以换用这种方式,不过需要把图标转成gif格式:
from tkinter import PhotoImage # 创建gif格式的图标对象 rooticon = PhotoImage(file='icons/pypad.gif') # 调用Tk底层命令设置窗口图标 root.tk.call('wm', 'iconphoto', root._w, rooticon)
这种方法不需要纠结相对路径的解析问题,适配性更强。
内容的提问来源于stack exchange,提问作者Alexey Orlov




