为什么图像不显示在tkinter中?(Python 2.x)

2024-04-26 12:10:44 发布

您现在位置:Python中文网/ 问答频道 /正文

好吧,我完全糊涂了。 因此,我最近开始使用Steam API,我决定开始做一些简单的事情,显示个人资料的化身图像。在

问题是,程序运行时除了不显示图像外没有任何错误。在

下面是显示图像的代码:

def displayImage():
global window
global STEAM_USER

response = urllib2.urlopen('http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=' + STEAM_API_KEY + '&steamids=' + STEAM_USER + '&format=xml')
htmlSource = response.read()
soup = BeautifulSoup(htmlSource)
avatar = soup.find('avatarfull').getText()
print avatar

image_bytes = urllib2.urlopen(avatar).read()
data_stream = io.BytesIO(image_bytes)
pil_image = Image.open(data_stream)
tk_image = ImageTk.PhotoImage(pil_image)
label = Label(window, image=tk_image)
label.pack(padx=5, pady=5)

剩下的代码如下:

^{pr2}$

我相信这是很简单的事情,但我不知道是什么原因导致图像无法显示。在


Tags: 代码图像imageapireadresponseurllib2window
2条回答

PhotoImage或其他图像对象添加到Tkinter小部件时,必须保留对该图像对象的引用。如果你不这样做,图像就不会一直出现。 我想说的是:

photo = PhotoImage(...)
label = Label(image=photo)
label.image = photo # keep a reference!
label.pack()

您可以参考this。在

如前所述,您必须确保在周围保留对图像的引用,否则它将被Python的垃圾回收器删除。除了上述方法外,我第一次学会克服这个问题的方法是简单地将图像附加到一个列表中,例如:

photo_list=[]
photo = PhotoImage(...)
photo_list.append(photo)

当时我喜欢这个方法,因为代码的作用显而易见(即存储图片以防止删除)。在

不管怎样,你必须确保你的照片被保存在身边!祝你好运:)

相关问题 更多 >