Tkinter导入自定义类中PhotoImage无法加载图片,按钮极小如何解决?
Tkinter PhotoImage加载图片失败的解决方法
你遇到的问题由多处错误叠加导致,修改后即可正常显示图片:
最早版本的核心问题
最初代码里的img是__init__方法内的局部变量,方法执行结束后会被Python垃圾回收,Tkinter不会单独保留图片引用,所以图片无法显示。你后续尝试加self.前缀保存引用的思路是正确的,只是还有另外两处错误没有修正,所以依然不生效。
剩余两处需要修正的错误
- PhotoImage构造参数使用错误
你直接将文件路径作为第一个参数传给PhotoImage(),但Tkinter中PhotoImage的第一个位置参数是name(图片内部标识名),不是文件路径。要加载本地图片必须显式指定file参数:
# 错误写法 PhotoImage('E:\\v1.1\\import.png') # 正确写法 PhotoImage(file='E:\\v1.1\\import.png')
- 变量引用错误
你第二次修改的代码中,创建Label时写的image=img没有加self.前缀,此时img变量未定义,会触发运行报错。
修复后完整代码
from tkinter import * class test: def __init__(self,master): self.master = master # 显式指定file参数加载图片,同时存为实例属性保留引用 self.img = PhotoImage(file='E:\\v1.1\\import.png') # 传递self.img给Label,同时指定master为当前窗口 self.imglabel = Label(master, image=self.img) self.imglabel.pack() # 创建图片按钮 self.b1 = Button(self.master, image = self.img) self.b1.pack()
主程序代码不需要修改,运行后即可正常加载图片按钮。
补充说明:如果你的PNG图片是高压缩格式、或者使用的Tkinter版本较低,还可以用Pillow库的ImageTk模块加载图片,兼容性更好。
内容的提问来源于stack exchange,提问作者Rotomegax
相关产品推荐
相关产品推荐

