Python的Tkinter 2.7问题与图像。

我试图在窗口中显示图像….似乎很简单,对不对? 那么我有一个大错误!

我在一个文件中有这个相同的代码:

import Tkinter root = Tkinter.Tk() canvas = Tkinter.Canvas(root) canvas.grid(row = 0, column = 0) photo = Tkinter.PhotoImage(file = '/Users/Richy/Desktop/1.gif') image1 = canvas.create_image(0,0, image=photo) root.mainloop() 

有用。

我有一个更大的文件的一部分:

 def officialPictureWindow(self): t = Toplevel(self) t.wm_title("Official Image") self.__canvas3 = Canvas(t) self.__canvas3.grid(row = 0, column = 0) photo = PhotoImage(file = '/Users/Richy/Desktop/1.gif') image1 = self.__canvas3.create_image(0,0, image=photo) 

它不工作!

当某人按下菜单栏上的button时,该function被调用。 所有其他菜单button,我已经正常运作,并显示他们的窗户。 其他人没有图像。

这不会有错误。 只是一个空白的屏幕..有谁知道为什么?

您需要保留对photo的额外参考,以免在function结束时过早收集垃圾。 Tkinter介绍进一步解释说:

注意:当一个PhotoImage对象被Python垃圾回收(例如,当你从一个存储了一个局部variables的图像的函数返回时),即使它被Tkinter小部件显示,图像也被清除。

为了避免这种情况,程序必须保留对图像对象的额外引用。 一个简单的方法是将图像分配给widget属性,如下所示:

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

在你的情况下,你可以附加图像到你的selfvariables,或者canvas。 只要分配给某个东西,它并不重要。

 self.image = photo #or: self.__canvas3.image = photo