I'm learning to use TkInter in Python and came across this example program from 'Thinking in TkInter' (http://thinkingtkinter.sourceforge.net) - see below.
Two buttons 'button1' and 'button2' are defined. The bug is that event.widget returns '.!frame.!button' from a button1 event. i.e. it somehow drops the '1' from the widget name. Events on button2 are correctly reported. Is this a bug or a feature? <code> from tkinter import * class MyApp: def __init__(self, parent): self.myParent = parent self.myContainer1 = Frame(parent) self.myContainer1.pack() button_name = "OK" self.button1 = Button(self.myContainer1, command=self.buttonHandler(button_name, 1, "Good stuff!")) # self.button1.bind("<Return>", self.buttonHandler_a(event, button_name, 1, "Good stuff!")) self.button1.configure(text=button_name, background="green") self.button1.pack(side=LEFT) self.button1.focus_force() # Put keyboard focus on button1 button_name = "Cancel" self.button2 = Button(self.myContainer1, command=self.buttonHandler(button_name, 2, "Bad stuff!")) # self.button2.bind("<Return>", self.buttonHandler_a(event, button_name, 2, "Bad stuff!")) self.button2.configure(text=button_name, background="red") self.button2.pack(side=LEFT) def buttonHandler(self, arg1, arg2, arg3): print(" buttonHandler routine received arguments:", arg1.ljust(8), arg2, arg3) def buttonHandler_a(self, event, arg1, arg2, arg3): print("buttonHandler_a received event", event) self.buttonHandler(arg1, arg2, arg3) print("\n"*100) # clear the screen print("Starting program tt077.") root = Tk() myapp = MyApp(root) print("Ready to start executing the event loop.") root.mainloop() print("Finished executing the event loop.") </code> -- https://mail.python.org/mailman/listinfo/python-list