Tkinter (Mac, Python 2.6): изображение не видно с помощью create_image и пункта меню - PullRequest
0 голосов
/ 12 апреля 2011

Я определил меню, в котором должно отображаться изображение (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()

Если я не введу неправильную строку (здесь: ххх), изображение не появится, только правильный размер черный прямоугольник.

Любая подсказка?

Заранее спасибо, Эрик.

1 Ответ

1 голос
/ 12 апреля 2011

Мое предположение таково: ваше изображение находится в локальной переменной. Когда show_photo() выходит, ссылка на изображение собирается для сбора мусора и, таким образом, изображение уничтожается. Когда это происходит, Tkinter больше не может показывать изображение, потому что данные исчезли.

Попробуйте сохранить ссылку на изображение в глобальной переменной или в переменной экземпляра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...