即使给出“ encoding ='utf-8'”,甚至给出“ errors ='ignore'”。我遇到同样的错误。
def open():
global My_Image
root.filename = filedialog.askopenfile(initialdir = '/Users/GAURAV/Desktop', title = "Select an Image file.", filetypes = (("JPG files", "*.jpg"), ("All files", "*.*")))
my_label = Label(root, text = root.filename).pack()
My_Image = ImageTk.PhotoImage(Image.open(root.filename)) #over here
My_Image_Label = Label(image = My_Image).pack()
答案 0 :(得分:0)
tkinter
具有两个功能askopenfile
(您使用)和askopenfilename
。
第二个函数(askopenfilename
)给出带有文件名的字符串。
但是第一个函数(askopenfile
)以文本模式打开文件,并且可以访问此打开的文件,而不是文件名。
如果您使用print(type(root.filename))
,则会看到<class '_io.TextIOWrapper'>
而不是<class 'str'>
这会带来问题-要读取图像,您需要字节模式,而不是文本模式。
因此,最好使用askopenfilename
来获取文件名,而Image.open()
将以字节模式将其打开并正确读取。
编辑:最终,您可以在mode="rb"
中使用askopenfile
来以字节模式打开文件
root.filename = tkinter.filedialog.askopenfile(mode='rb', initialdir=..., ...)
和print(typo(root.filename))
将显示<class '_io.BufferedReader'>
,它也应与Image.open()
一起使用
顺便说一句::当您使用askopenfile
时,会打开文件,文件名在root.filename.name