Nicolas Graner wrote: > I have a problem with the standard "turtle" module. When a turtle has > a custom shape of type "compound", it doesn't seem to respond to click > events. No problem with polygon shapes. > > Running python 3.2.3, turtle version 1.1b on Windows XP. > > Here is my test file: > > ################################################## > import turtle > square = ((0,0),(0,20),(20,20),(20,0)) > turtle.addshape("sq1", square) # sq1 = polygon shape > s = turtle.Shape("compound") > s.addcomponent(square, "red") > turtle.addshape("sq2", s) # sq2 = compound shape > t1 = turtle.Turtle(shape="sq1") > t2 = turtle.Turtle(shape="sq2") > t2.fd(20) # set the turtles side by side > def click(x,y): print("click at",x,y) > t1.onclick(click) > t2.onclick(click) > turtle.mainloop() > ################################################## > > When I run this and click on the black square (i.e. t1), the message > "click at..." gets printed on the console. When I click on the red > square (i.e. t2), nothing happens. > > Bug or feature?
I believe it's a bug. Please report it on http://bugs.python.org As a quick-fix here's a monkey patch that seems to work: import turtle def _onclick(self, item, fun, num=1, add=None): if isinstance(item, list): for item in item: self._onclick(item, fun, num, add) return if fun is None: self.cv.tag_unbind(item, "<Button-%s>" % num) else: def eventfun(event): x, y = (self.cv.canvasx(event.x)/self.xscale, -self.cv.canvasy(event.y)/self.yscale) fun(x, y) self.cv.tag_bind(item, "<Button-%s>" % num, eventfun, add) turtle.TurtleScreenBase._onclick = _onclick square = ((0,0),(0,20),(20,20),(20,0)) turtle.addshape("sq1", square) # sq1 = polygon shape s = turtle.Shape("compound") s.addcomponent(square, "red") turtle.addshape("sq2", s) # sq2 = compound shape t1 = turtle.Turtle(shape="sq1") t2 = turtle.Turtle(shape="sq2") t2.fd(20) # set the turtles side by side def click(x,y): print("click at",x,y) t1.onclick(click) t2.onclick(click) turtle.mainloop() -- http://mail.python.org/mailman/listinfo/python-list