2013-05-07 13 views
22

Questo codice funziona:Perché l'immagine Tkinter non viene visualizzata se è stata creata in una funzione?

import tkinter 

root = tkinter.Tk() 
canvas = tkinter.Canvas(root) 
canvas.grid(row = 0, column = 0) 
photo = tkinter.PhotoImage(file = './test.gif') 
canvas.create_image(0, 0, image=photo) 
root.mainloop() 

Mi mostra l'immagine.

Ora, questo codice viene compilato, ma non mi mostra l'immagine, e io non so perché, perché è lo stesso codice, in una classe:

import tkinter 

class Test: 
    def __init__(self, master): 
     canvas = tkinter.Canvas(master) 
     canvas.grid(row = 0, column = 0) 
     photo = tkinter.PhotoImage(file = './test.gif') 
     canvas.create_image(0, 0, image=photo) 

root = tkinter.Tk() 
test = Test(root) 
root.mainloop() 
+0

Possibile duplicato [Impossibile visualizzare un'immagine in Tkinter] (https://stackoverflow.com/questions/3359717/cannot-display-an-image-in-tkinter) – Nae

risposta

34

La variabile photo è un locale variabile che ottiene la garbage collection dopo che la classe è stata istanziata. Salva un riferimento alla foto, ad esempio:

self.photo = tkinter.PhotoImage(...) 

Se fate una ricerca su Google su "immagine tkinter non visualizza", il primo risultato è questo:

http://effbot.org/pyfaq/why-do-my-tkinter-images-not-appear.htm