On 12/4/05, Peter Otten <[EMAIL PROTECTED]> wrote: > Ben Bush wrote: > > > On 12/4/05, Diez B. Roggisch <[EMAIL PROTECTED]> wrote: > >> Ben Bush wrote: > >> > I tested the following code and wanted to get the message of "oval2 > >> > got hit" if I click the red one. But I always got "oval1 got hit". > >> > from Tkinter import * > >> > root=Tk() > >> > canvas=Canvas(root,width=100,height=100) > >> > canvas.pack() > >> > a=canvas.create_oval(10,10,20,20,tags='oval1',fill='blue') > >> > b=canvas.create_oval(50,50,80,80,tags='oval2',fill='red') > >> > def myEvent(event): > >> > if a: > >> > >> Here is your problem. a is a name, bound to some value. So - it is true, > >> as python semantics are that way. It would not be true if it was e.g. > >> > >> False, [], {}, None, "" > >> > >> > >> What you want instead is something like > >> > >> if event.source == a: > >> ... > >> > >> Please note that I don't know what event actually looks like in Tkinter, > >> so check the docs what actually gets passed to you. > > > > got AttributeError: Event instance has no attribute 'source' > > Note that Diez said /something/ /like/ /event.source/. The source is > actually called widget -- but that doesn't help as it denotes the canvas as > a whole, not the individual shape. > > The following should work if you want one handler for all shapes: > > def handler(event): > print event.widget.gettags("current")[0], "got hit" > canvas.tag_bind('oval1', '<Button>', handler) > canvas.tag_bind('oval2', '<Button>', handler) > > I prefer one handler per shape: > > def make_handler(message): > def handler(event): > print message > return handler > > canvas.tag_bind('oval1', '<Button>', make_handler("oval 1 got hit")) > canvas.tag_bind('oval2', '<Button>', make_handler("oval 2 got hit")) > > Peter > > -- > http://mail.python.org/mailman/listinfo/python-list > Peter, It works. Thanks! is there any good material to read if I want to improve my understanding of working on interactive ways of dealing with shapes on the TKinter? -- Ben Bush -- http://mail.python.org/mailman/listinfo/python-list