如何在Tkinter按钮上添加图片替代文本,解决显示pyimage异常问题
Tkinter按钮显示图片失败问题解决方案
核心错误原因
你将图片对象传入了Button组件的text参数,该参数仅用于展示文本内容,传入非字符串类型时Tkinter会自动将其转为字符串输出,你看到的pyimage3就是图片对象转为字符串后的默认标识。
修正方案
将Button创建时的参数替换为image即可,同时注意适配按钮尺寸:
- 原代码中Dark Mode按钮的创建逻辑里,把
text=self.darkmode_img改为image=self.darkmode_img - 原有
width=42、height=2参数是针对文本模式的字符单位,使用图片时可删除这两个参数让按钮自动适配图片尺寸,也可调整为对应图片的像素值。
修正后的代码片段
myButton1 = Button(f1, # 替换text为image参数 image=self.darkmode_img, # 文本模式的宽高可删除 # width=42, # height=2, fg='#000', border=0, bg="#fff", borderwidth=0, activeforeground='#262626', activebackground="#F0F0F0", command=cmd)
其他注意事项
你代码中后续的img1方法存在局部变量未绑定实例的问题,会导致顶部菜单按钮也出现同类异常,需做如下修改:
def img1(self): # 改为绑定到实例属性,避免被垃圾回收 self.img1 = ImageTk.PhotoImage(Image.open("c:/Users/sheran/Downloads/toggle_win/open1111.png"))
内容的提问来源于stack exchange,提问作者Sheran Fernando
相关产品推荐
相关产品推荐

