Why my image cannot be displayed?
MRAB
python at mrabarnett.plus.com
Fri Aug 12 23:27:34 EDT 2016
On 2016-08-13 02:40, huey.y.jiang at gmail.com wrote:
> Hi All,
>
> Image display drives me crazy. After I get it displayed, and want to do the job with a class, display failed again. Please take a look at my trial code:
>
> from Tkinter import *
>
> class imageDisplay:
> def __init__(self, parent=None):
> canvas = Canvas(width=400, height=300, bg='beige')
> canvas.pack()
> self.canvas = canvas
> img = PhotoImage(file="xxx.gif")
> self.canvas.create_image(150, 0, image=img, anchor=NW)
>
> if __name__ == '__main__':
> imageDisplay()
> mainloop()
>
> Result: A blank canvas was displayed. No error message.
>
> Can somebody help? Thanks so much!
>
You need to keep a reference to the image, so add:
self.img = img
otherwise, when __init__ returns, it'll be garbage-collected.
You also need to keep a reference to the instance created by
imageDisplay(), so:
display = imageDisplay()
This is because the internals of tkinter is actually written in Tcl
(another programming language), so although Tcl might have a reference
to the window you're seeing, Python itself won't. (Why Tcl maintains a
reference to the window, but not the image that's in the window, is a
mystery... :-))
More information about the Python-list
mailing list