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

Reply via email to