web-dev-qa-db-fra.com

Pourquoi l'image Tkinter n'apparaît-elle pas si elle est créée dans une fonction?

Ce code fonctionne:

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()

Cela me montre l'image.

Maintenant, ce code se compile mais il ne me montre pas l'image, et je ne sais pas pourquoi, car c'est le même code, dans une 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()
27
thomas.winckell

La variable photo est une variable locale qui récupère les ordures après l'instanciation de la classe. Enregistrez une référence à la photo, par exemple:

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

Si vous effectuez une recherche Google sur "l'image tkinter ne s'affiche pas", le premier résultat est le suivant:

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

41
Bryan Oakley