我已经定义了一个菜单,该菜单应该在项目中显示图像(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),否则图像不会出现,只会出现正确尺寸的黑色矩形。
有任何线索吗?
先谢谢了, 埃里克。
答案 0 :(得分:1)
我的猜测是这样的:你的图像是一个局部变量。当show_photo()
退出时,图像引用会被垃圾收集,从而导致图像被破坏。当发生这种情况时,Tkinter不再能够显示图像,因为数据已经消失。
尝试在全局变量或实例变量中保存对图像的引用。