Python:Tkinter未显示我的图片或界面
我正在尝试创建一个用户界面,想在右上角放一张图片。以下是我的代码:
import tkinter as tk
import urllib.request
import base64 as b64
class my_ui(tk.Tk):
def __init__(self, parent):
tk.Tk.__init__(self,parent)
self.parent=parent
self.intialize()
def intialize(self):
self.grid()
#Welcome
label = tk.Label(self,text="Welcome to my UI", anchor='center',fg='white',bg='blue')
label.grid(column=0,row=0,columnspan=2,rowspan=2,sticky='EW')
#Buttons
button = tk.Button(self,text="Button 1",command=self.OnButtonClick)
button.grid(column=0,row=3,sticky='W')
def OnButtonClick(self):
print("You clicked the button!")
if __name__ == "__main__":
app = my_ui(None)
#Logo URL - just a smiley face
URL = "https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcQCItlNQe0QaiuhkADUwgVTpx-Isaym6RAP06PHkzBe2Yza3a4rYIkHuB8"
u = urllib.request.urlopen(URL)
raw_data = u.read()
u.close()
b64_data = b64.encodestring(raw_data)
photo = tk.PhotoImage(data=b64_data)
logo = tk.Label(app, image=photo)
logo.image = photo # To save it in memory
logo.pack() # If I exclude this line, UI works fine.
app.title('My User Interface')
app.mainloop()
我从网上获取一个.gif格式的图片,并通过我的函数返回一个PhotoImage对象。当我运行这个代码时,没有出现错误,但我的tkinter窗口根本不显示。如果我把评论中提到的那行代码去掉,用户界面就能正常显示(有按钮,但没有图片),而且也没有错误。
我不太明白窗口不出现到底意味着什么。我在Mac OSx上运行的是Python 3.4.1。任何帮助都非常感谢!
1 个回答
0
当一个 tk.PhotoImage
对象被垃圾回收时,图像就像被“释放”了一样。虽然技术上来说这个图像仍然在使用中,所以并没有被彻底销毁,但它会完全变成空白。你可以把你的 return
这一行替换成:
photo = tk.PhotoImage(data=b64_data)
return photo
记得把 photo
声明为全局变量哦。