问题
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()
回答1:
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:
http://effbot.org/pyfaq/why-do-my-tkinter-images-not-appear.htm
回答2:
Just add global photo
as the first line inside the function.
来源:https://stackoverflow.com/questions/16424091/why-does-tkinter-image-not-show-up-if-created-in-a-function