为了账号安全,请及时绑定邮箱和手机立即绑定

Python Tkinter 2.7图像问题。

Python Tkinter 2.7图像问题。

拉风的咖菲猫 2019-10-22 22:34:42
我正在尝试在窗口中显示图像。...似乎很简单,对吧?好吧,我有个大虫子!我在一个文件中有这个完全相同的代码:import Tkinterroot = 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)没用!当有人按下我的菜单栏上的按钮时,将调用该函数。我所有其他的菜单栏按钮都可以正常运行并显示其窗口。其他没有图像。这没有任何错误。只是一个黑屏..有人知道为什么吗?
查看完整描述

1 回答

?
四季花海

TA贡献1811条经验 获得超5个赞

您需要保留一个额外的引用,photo以免在函数结束时过早地收集垃圾。Tkinter简介进一步解释了:


注意:当PhotoImage对象被Python垃圾收集时(例如,当您从将图像存储在局部变量中的函数返回时),即使Tkinter小部件正在显示图像,该图像也会被清除。


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


label = Label(image=photo)

label.image = photo # keep a reference!

label.pack()


在您的情况下,可以将图像附加到self变量或画布上。只要分配给某物,它并不重要。


self.image = photo

#or:

self.__canvas3.image = photo


查看完整回答
反对 回复 2019-10-22
  • 1 回答
  • 0 关注
  • 245 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信