python34中的背景图像没有出现在运行时

时间:2015-03-30 11:12:38

标签: python image tkinter

任何人都可以在这里帮助我。我使用的是python34,下面提到的代码cnippet不会产生任何解释错误。但它在运行时没有显示图片。

import tkinter as tk
from PIL import ImageTk



class MyApp(Frame):
 def __init__(self,parent):
    Frame.__init__(self,parent)
    self.parent=parent
    self.createUI()

 def createUI(self):
    self.grid()
    raw_data=Image.open("abc.gif")
    image = ImageTk.PhotoImage(raw_data)
    label=tk.Label(image = image)
    label.grid(column=0,row=0)


root=tk.Tk()
app=MyApp(root)
app.mainloop()

虽然以下代码工作正常。     将tkinter导入为tk     来自PIL导入ImageTk     import urllib.request

root = tk.Tk()

raw_data=Image.open("abc.gif")
image = ImageTk.PhotoImage(raw_data)
label = tk.Label(image=image)
label.pack()
tk.mainloop()

认为我缺少或做错了。

1 个答案:

答案 0 :(得分:-1)

当你转移到基于类的结构时,你需要保持对图像的引用以防止python垃圾收集它,通常这是通过将它添加到属于该类的列表来完成的:

import tkinter as tk
from PIL import ImageTk
class MyApp(Frame):
    def __init__(self,parent):
        Frame.__init__(self,parent)
        self.parent=parent
        self.createUI()
        self.images = []


    def createUI(self):
        self.grid()
        raw_data=Image.open("abc.gif")
        image = ImageTk.PhotoImage(raw_data)
        self.images.append(image)
        label=tk.Label(image = image)
        label.grid(column=0,row=0)


root=tk.Tk()
app=MyApp(root)
app.mainloop()