Terry Reedy at 2016/3/2 UTC+8 3:04:10PM wrote: > On 3/1/2016 9:35 PM, jf...@ms4.hinet.net wrote: > > Recently I was puzzled by a tkinter problem. The codes below (from a book) > > can display the picture correctly. > > > > gifdir = "../gifs/" > > from tkinter import * > > win = Tk() > > photo = PhotoImage(file=gifdir + "ora-pp.gif") > > Button(win, image=photo).pack() > > win.mainloop() > > Since photo is a global name, the binding remain until you explicitly > delete it or exit the app. > > > And the codes below (from another book) will also work. > > > > class DrumMachine: > > .... > > .... > > def create_play_bar(self): > > .... > > .... > > photo = PhotoImage(file='images/signature.gif') > > label = Label(playbar_frame, image=photo) > > label.image = photo > > label.grid(row=start_row, column=50, padx=1, sticky='w') > > .... > > .... > > Here photo is a local name and the binding disappears when the function > exits. I would rewrite it to follow pattern 1. > > self.photo = PhotoImage(file='images/signature.gif') > label = Label(playbar_frame, image=self.photo) > > To me, saving an attribute reference is not worth the extra line. > > > In the second example, I noticed that the "photo" was referenced two times > > and I think it might be a redundancy so I remove the line "label.image = > > photo". But it fails then. > > On another question, I made the same suggestion. Oops. > > -- > Terry Jan Reedy
Thanks, Terry. After reading your reply I noticed that I had make a mistake. The "image" is not an attribute of the Button. It's an option. The "label.image=photo" does a different thing. But it didn't help on solving my puzzle. If the problem was caused by the "photo" is a local, then binding the "photo" to an local attribute ("label" is a local too) seems no meaning at all. But it did make difference! No idea how the underneath mechanism works. I run this example under the pdb and it can display the picture correctly even without the "label.image=photo" statement. Why it fails on running at real time? tk event scheduling? I don't know. --Jach -- https://mail.python.org/mailman/listinfo/python-list