diff -r 49017c391564 Lib/test/test_turtle_guionly.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Lib/test/test_turtle_guionly.py Wed Jun 11 20:45:55 2014 -0400 @@ -0,0 +1,97 @@ +import unittest +from test import support +import os + +support.requires('gui') + +turtle = support.import_module('turtle') + +square = ((0,0),(0,20),(20,20),(20,0)) + +def simulate_mouse_input(s, coords): + init_pos = coords[0] + end_pos = coords[-1] + s.screen.cv._canvas.event_generate('', x=0, y=0) + s.screen.cv._canvas.event_generate('', x=init_pos[0], y=init_pos[1]) + s.screen.cv._canvas.event_generate('', x=init_pos[0], y=init_pos[1]) + for c in coords: + s.screen.cv._canvas.event_generate('', x=c[0], y=c[1]) + s.screen.cv._canvas.event_generate('', x=end_pos[0], y=end_pos[1]) + + +class MouseEventTestCase(unittest.TestCase): + # Tests onclick, onrelease, and ondrag events. + def test_polygon_onclick(self): + clicks = [] + turtle.addshape('sq', square) + shape = turtle.Turtle(shape='sq') + shape.turtle.screen._root.withdraw() + click = lambda x, y: clicks.append((x, y)) + shape.onclick(click) + simulate_mouse_input(shape, [(333, 317)]) + shape.screen.cv._canvas.update() + self.assertTrue(len(clicks) == 1) + + def test_compound_onclick(self): + clicks = [] + turtle.addshape('sq', square) + shape = turtle.Shape('compound') + shape.addcomponent(square, 'red') + turtle.addshape('sq', shape) + shape = turtle.Turtle(shape='sq') + shape.turtle.screen._root.withdraw() + click = lambda x, y: clicks.append((x, y)) + shape.onclick(click) + simulate_mouse_input(shape.turtle, [(333, 317)]) + shape.screen.cv._canvas.update() + self.assertTrue(len(clicks) == 1) + + def test_polygon_onrelease(self): + releases = [] + turtle.addshape('sq', square) + shape = turtle.Turtle(shape='sq') + shape.turtle.screen._root.withdraw() + release = lambda x, y: releases.append((x, y)) + shape.onrelease(release) + simulate_mouse_input(shape, [(333, 317)]) + shape.screen.cv._canvas.update() + self.assertTrue(len(releases) > 0) + + def test_compound_onrelease(self): + releases = [] + turtle.addshape('sq', square) + shape = turtle.Shape('compound') + shape.addcomponent(square, 'red') + turtle.addshape('sq', shape) + shape = turtle.Turtle(shape='sq') + shape.turtle.screen._root.withdraw() + release = lambda x, y: releases.append((x, y)) + shape.onrelease(release) + simulate_mouse_input(shape.turtle, [(333, 317)]) + shape.screen.cv._canvas.update() + self.assertTrue(len(releases) > 0) + + def test_polygon_ondrag(self): + drags = [] + turtle.addshape('sq', square) + shape = turtle.Turtle(shape='sq') + shape.turtle.screen._root.withdraw() + drag = lambda x, y: drags.append((x, y)) + shape.ondrag(drag) + simulate_mouse_input(shape.turtle, [(333, 317), (334, 318)]) + shape.screen.cv._canvas.update() + self.assertTrue(len(drags) > 0) + + def test_compound_ondrag(self): + drags = [] + turtle.addshape('sq', square) + shape = turtle.Shape('compound') + shape.addcomponent(square, 'red') + turtle.addshape('sq', shape) + shape = turtle.Turtle(shape='sq') + shape.turtle.screen._root.withdraw() + drag = lambda x, y: drags.append((x, y)) + shape.ondrag(drag) + simulate_mouse_input(shape.turtle, [(333, 317), (334, 318)]) + shape.screen.cv._canvas.update() + self.assertTrue(len(drags) > 0) diff -r 49017c391564 Lib/turtle.py --- a/Lib/turtle.py Wed Mar 19 10:07:26 2014 +0000 +++ b/Lib/turtle.py Wed Jun 11 20:45:55 2014 -0400 @@ -3530,7 +3530,11 @@ >>> onclick(turn) # Now clicking into the turtle will turn it. >>> onclick(None) # event-binding will be removed """ - self.screen._onclick(self.turtle._item, fun, btn, add) + if (self.turtle._type == 'compound'): + for i in self.turtle._item: + self.screen._onclick(i, fun, btn, add) + else: + self.screen._onclick(self.turtle._item, fun, btn, add) self._update() def onrelease(self, fun, btn=1, add=None): @@ -3555,7 +3559,11 @@ Clicking on joe turns fillcolor red, unclicking turns it to transparent. """ - self.screen._onrelease(self.turtle._item, fun, btn, add) + if (self.turtle._type == 'compound'): + for i in self.turtle._item: + self.screen._onrelease(i, fun, btn, add) + else: + self.screen._onrelease(self.turtle._item, fun, btn, add) self._update() def ondrag(self, fun, btn=1, add=None): @@ -3576,7 +3584,11 @@ across the screen thereby producing handdrawings (if pen is down). """ - self.screen._ondrag(self.turtle._item, fun, btn, add) + if (self.turtle._type == 'compound'): + for i in self.turtle._item: + self.screen._ondrag(i, fun, btn, add) + else: + self.screen._ondrag(self.turtle._item, fun, btn, add) def _undo(self, action, data):