oval

Ben Bush pythonnew at gmail.com
Sun Dec 4 20:35:48 EST 2005


On 12/4/05, Peter Otten <__peter__ at web.de> wrote:
> Ben Bush wrote:
>
> > On 12/4/05, Diez B. Roggisch <deets at nospam.web.de> 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



More information about the Python-list mailing list