Tkinter(Mac,Python 2.6):使用create_image和Menu项看不到图像

时间:2011-04-12 05:39:32

标签: image canvas menu tkinter invisible

我已经定义了一个菜单,该菜单应该在项目中显示图像(JPG,250x250)。

import Tkinter
from PIL import Image, ImageTk

def show_photo():
  img=Image.open("image.jpg")  
  photo=ImageTk.PhotoImage(img)   
  width=photo.width();
  height=photo.height()   
  w=Tkinter.Toplevel(root)  
  w.geometry(str(width+2)+'x'+str(height+2))
  w.title(str(width)+'x'+str(height))  
  canvas=Tkinter.Canvas(w, bg="black", width=width, height=height)  
  canvas.pack()  
  img=canvas.create_image(0,0,anchor=Tkinter.NW,image=photo)
  xxx    # NameError

root=Tkinter.Tk() 
mainmenu = Tkinter.Menu(root) 
menu1 = Tkinter.Menu(mainmenu)
mainmenu.add_cascade(label="Menu 1", menu=menu1)
menu1.add_command(label="Show photo", command=show_photo)
root.config(menu=mainmenu)
root.mainloop()

除非我输入错误的行(此处为:xxx),否则图像不会出现,只会出现正确尺寸的黑色矩形。

有任何线索吗?

先谢谢了, 埃里克。

1 个答案:

答案 0 :(得分:1)

我的猜测是这样的:你的图像是一个局部变量。当show_photo()退出时,图像引用会被垃圾收集,从而导致图像被破坏。当发生这种情况时,Tkinter不再能够显示图像,因为数据已经消失。

尝试在全局变量或实例变量中保存对图像的引用。