Python使用tkinter加载图片时报错找不到pyimage2文件是什么原因?
报错原因
- 核心错误在代码第17行
filename=PhotoImage(file= bg):你已经在第12行通过bg = PhotoImage(file = path + "\\BGnew.png")把背景图加载为PhotoImage类型的图片对象了,而PhotoImage的file参数要求传入的是文件路径字符串,你传入已生成的图片对象后,tkinter会把图片对象的内部标识(比如报错里的pyimage2)当做文件名去磁盘查找,自然找不到对应文件触发报错。 - 额外的路径写法隐患:硬编码
\\做路径分隔符只适用于Windows系统,跨平台运行会出错。 - 隐形坑:如果图片对象没有被组件引用保留,会被Python垃圾回收机制清理,导致运行后背景不显示。
解决方法
直接删除重复创建图片对象的冗余逻辑,用已经加载好的bg对象给Label赋值即可,同时优化路径拼接写法适配多系统,修正后的完整代码如下:
from tkinter import * from locate import this_dir import os # 用os.path.join拼接路径,自动适配不同系统的分隔符 path = this_dir() bg_path = os.path.join(path, "BGnew.png") icon_path = os.path.join(path, "icon.png") print(bg_path) window = Tk() window.geometry("480x480") window.title("CodeHook - Start Menu") ico = PhotoImage(file=icon_path) bg = PhotoImage(file=bg_path) window.iconphoto(True, ico) # 直接用已加载的bg对象创建背景标签 background_label = Label(window, image=bg) # 把图片对象绑定到标签属性上,避免被垃圾回收导致背景不显示 background_label.image = bg background_label.place(x=0, y=0, relwidth=1, relheight=1) new_workspace = Button(window, text = "New Workspace", font = ("", 13)) new_workspace.pack() window.mainloop()
内容的提问来源于stack exchange,提问作者Pixel
相关产品推荐
相关产品推荐

