sohca...@gmail.com at 2016/3/3  UTC+8 7:38:45AM wrote:
> "label" might be a local variable, but it's constructor includes a reference 
> to the frame in which it is going.  The frame object will create a reference 
> to the newly-created Label object.  At that point, there will be two 
> references to the new Label object.  When the function exits and "label" goes 
> out of scope, the object still exists because the frame still has a reference.
> 
It sound reasonable enough:-)

There is a page talking about why should keep a separate reference in tkinter.
http://effbot.org/pyfaq/why-do-my-tkinter-images-not-appear.htm

I also saw almost every code on the web about it was written in this way:
    label = Label(playbar_frame, image=photo)
    label.image = photo
But why? Won't it be better if it was written as:
    label = Label(playbar_frame, image=photo)
    label.imgKeeper = photo
At least it makes the meaning more clear, not lead someone to a wrong 
direction:-(

Anyway, following Terry's suggestion might be a better idea, making it bind to 
an object which will live for as long as the application is.

--Jach
-- 
https://mail.python.org/mailman/listinfo/python-list

Reply via email to