今天,我尝试用tkinter创建一个图像查看程序,我编写的代码似乎得到了错误_tkinter.TclError: couldn't recognize data in image file "system_drive/boat.jpg"
。但除此之外,据我所知,我没有得到这个错误的原因,文件boat.jpg
存在于system_drive
文件夹中,我也没有犯任何语法错误,谢谢您的帮助!
代码:
from tkinter import *
import os
tk = Tk()
image_list = []
for file in os.listdir(os.getcwd()):
if file.endswith(".png") or file.endswith(".jpg"):
image_list.append(PhotoImage(file))
file_name = Entry(tk, width=20,font=("Helvetica", 20))
canvas = Canvas(tk, width=500, height=500)
canvas.pack()
def click_show_img(x):
global file_name
global image_list
print("opening system_drive/{0}".format(file_name.get()))
img = PhotoImage(file="system_drive/{0}".format(file_name.get()))
canvas.create_image(60,60, anchor=NW, image=img)
tk.bind("<Return>", click_show_img)
file_name.pack()
tk.mainloop()
截图:
窗口的外观:
它应该是什么样的:
发布于 2022-04-24 21:53:04
我已经设法解决了代码的问题;我创建了一个新的label实例,我只需更新标签实例的图像,如下所示:
from tkinter import *
import os
from PIL import Image, ImageTk
tk = Tk()
image_list = []
image_holder = Label()
for file in os.listdir(os.getcwd()):
if file.endswith(".png"):
image_holder.image = PhotoImage(name)
img = PhotoImage(file="system_drive/{0}".format(file_name.get()))
image_list.append(img)
image_holder.place(x=-10,y=-10)
file_name = Entry(tk, width=20,font=("Helvetica", 20))
canvas = Canvas(tk, width=500, height=500)
canvas.pack()
my_label = Label(tk,bg="white")
my_label.place(x=-10,y=-20)
def click_show_img(x):
global file_name
global image_list
print("opening system_drive/{0}".format(file_name.get()))
link = "system_drive/{0}".format(file_name.get())
my_img = ImageTk.PhotoImage(Image.open(link).resize((250,250)))
my_label.configure(image=my_img)
my_label.image = my_img
my_label.place(relx=0.5,rely=0.3,anchor=CENTER)
tk.bind("<Return>", click_show_img)
file_name.pack()
tk.mainloop()
发布于 2022-04-24 16:10:15
Tkinter不支持jpeg作为图像格式。如果要显示.jpg文件,则需要使用枕头或其他库来打开它。
来自tk的正式文件:
目前,只支持PNG、GIF和PPM/PGM格式。
这就是为什么tkinter不承认这些数据的原因。它与路径无关,与文件中数据的格式有关。)或者其他图书馆来打开它。
来自tk的正式文件:
目前,只支持PNG、GIF和PPM/PGM格式。
这就是为什么tkinter不承认这些数据的原因。它与路径无关,与文件中数据的格式有关。
你还有另外一个问题。如果不保存对图像的引用,python的垃圾收集器将在函数返回时删除图像数据。看起来你已经有了一个全局数组,它有图像,所以我不明白你为什么要创建新的图像。
img = PhotoImage(file="system_drive/{0}".format(file_name.get()))
image_list.append(img)
有关详细信息,请参阅为什么如果在函数中创建Tkinter图像就不会显示出来?。
代码开始时的第三个问题是,必须将文件名作为PhotoImage
属性的值传递给file
,而不是位置参数。第一个位置参数被视为名称,而不是路径。
image_list.append(PhotoImage(file=file))
发布于 2022-04-24 16:41:02
您需要枕头库来打开图像,并显示在tkinter窗口。
from PIL import Image, ImageTk
将click_show_img函数更改为:
def click_show_img(x):
global file_name
global image_list
print("opening system_drive/{0}".format(file_name.get()))
img = Image.open("opening system_drive/{0}".format(file_name.get()))
img = ImageTk.PhotoImage(img)
canvas.create_image(60, 60, anchor=NW, image=img)
https://stackoverflow.com/questions/71989978
复制相似问题