["python","image","tkinter","tkinter-canvas"]
Why does Tkinter image not show up if created in a function?

This code works: 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() It shows me the image. Now, this code compiles but it doesn't show me the image, and I don't know why, because it's the same code, in a class: 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()
The variable photo is a local variable which gets garbage collected after the class is instantiated. The solution involves saving a reference to the photo, for example: self.photo = tkinter.PhotoImage(...) If you do a Google search on "tkinter image doesn't display", the first result is this: Why do my Tkinter images not appear?