无法从TKinter的URL加载图像



我的目标是使用tkinter python从URL显示JPG图像。

这是我用作参考的stackoverflow链接。但是当我尝试运行代码时,我收到了一堆错误,例如:

  • KeyError: b 'R0l…
  • AttributeError: 'PhotoImage'对象没有属性'_PhotoImage__photo'

有人能解决这个问题吗?

这是代码:

import tkinter as tk
from PIL import Image, ImageTk
from urllib.request import urlopen
import base64
root = tk.Tk()
URL = "http://www.universeofsymbolism.com/images/ram-spirit-animal.jpg"
u = urlopen(URL)
raw_data = u.read()
u.close()

b64_data = base64.encodestring(raw_data)
photo = ImageTk.PhotoImage(b64_data)
label = tk.Label(image=photo)
label.image = photo
label.pack()
root.mainloop()

第一个错误是没有在ImageTk.PhotoImage(data=b64_data)中指定data参数。然而,我不确定为什么PhotoImage无法读取base64数据。

一个解决方法是使用io模块中的BytesIO。您可以将从图像中读取的原始数据传入BytesIO,在Image中打开它,然后将其传入PhotoImage

我找到从这里打开图像的代码。

import tkinter as tk
from PIL import Image, ImageTk
from urllib2 import urlopen
from io import BytesIO
root = tk.Tk()
URL = "http://www.universeofsymbolism.com/images/ram-spirit-animal.jpg"
u = urlopen(URL)
raw_data = u.read()
u.close()
im = Image.open(BytesIO(raw_data))
photo = ImageTk.PhotoImage(im)
label = tk.Label(image=photo)
label.image = photo
label.pack()
root.mainloop()

如果有人有更好的答案,为什么编码失败,这将是一个更合适的回答这个问题。

非常相似,但比霍布斯的回答更容易,您可以直接使用ImageTk中的data参数。PhotoImage构造函数:

import tkinter as tk
from PIL import Image, ImageTk
from urllib.request import urlopen
root = tk.Tk()
URL = "http://www.universeofsymbolism.com/images/ram-spirit-animal.jpg"
u = urlopen(URL)
raw_data = u.read()
u.close()
photo = ImageTk.PhotoImage(data=raw_data) # <-----
label = tk.Label(image=photo)
label.image = photo
label.pack()
root.mainloop()

相关内容

  • 没有找到相关文章

最新更新