Steven D'Aprano wrote: > On Sat, Jul 23, 2016 at 01:55:03PM -0400, R. Alan Monroe wrote: >> > button = tkinter.Button(frame, text='Up', command=click_up) >> > button = tkinter.Button(frame, text='Down', command=click_down) >> >> >> > when I first looked at it I thought it would not work, thinking that >> > the second reference to button = would over write the first one. >> >> It DOES overwrite it, in this sense: >> >> The first button is a thing that exists because Button() generates it. >> "button" is a word you can now use to refer to that thing. >> >> Later on, the second call to Button() generates a new, separate thing. >> "button" is now a word you can use to refer to the second thing, >> but *the first thing doesn't cease to exist*. > > Why not? Why isn't the first button not garbage collected?
The answer is of course always the same: because there is another reference. The hard part is also always the same: how can that reference be found? Here's a way to do it in this case: $ cat tksnippet.py import tkinter window = tkinter.Tk() def click_up(): pass def click_down(): pass counter = tkinter.StringVar() frame = tkinter.Frame(window) frame.pack() button = tkinter.Button(frame, text='Up', command=click_up) button.pack() print("button whose reference we are going to overwrite:") print(repr(button), button) button = tkinter.Button(frame, text='Down', command=click_down) button.pack() label = tkinter.Label(frame, textvariable=counter) label.pack() $ python3 -i tksnippet.py button whose reference we are going to overwrite: <tkinter.Button object at 0x7f5412a9ca90> .139999066974024.139999067097744 >>> forgotten_button = frame.nametowidget(".139999066974024.139999067097744") >>> forgotten_button <tkinter.Button object at 0x7f5412a9ca90> >>> forgotten_button["text"] 'Up' So it is indeed the up-button rather than a reused memory address. The above snippet is only for demonstration purposes; if you plan to access a widget later-on you should always use the straightforward approach and keep a reference around in your own code. _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor