thomas.winckell thomas.winckell - 5 months ago 79
Python Question

Putting gif image in a canvas with Tkinter

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

Answer

The variable photo is a local variable which gets garbage collected after the class is instantiated. Save 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.

Comments