Credit: Problem written by a mystery CS106A Lecturer.
Write a program where a blue rectangle (which represents a stamp) follows a user's mouse around. Your program should draw a rectangle on the screen centered around the mouse when the user clicks.
""" File: stamp_tool.py ------------------- This program lets you move the mouse to move a "stamp" around the screen, and wherever you click it "stamps" (adds a copy of the stamp shape) to that location. """ from graphics import Canvas STAMP_SIZE = 50 def main(): canvas = Canvas() canvas.set_canvas_title("Stamp Tool") stamp_tool = draw_stamp(canvas, canvas.get_mouse_x(), canvas.get_mouse_y(), 'blue') while True: clicks = canvas.get_new_mouse_clicks() for click in clicks: draw_stamp(canvas, click.x, click.y, 'black') # stamp tool should be topmost canvas.raise_to_front(stamp_tool) center_stamp(canvas, stamp_tool, canvas.get_mouse_x(), canvas.get_mouse_y()) canvas.update() canvas.mainloop() def draw_stamp(canvas, x, y, color): """ Draws a stamp (rect) of the given color centered around the given location. Returns the rectangle drawn. """ rect = canvas.create_rectangle(x - STAMP_SIZE / 2, y - STAMP_SIZE / 2, x + STAMP_SIZE / 2, y + STAMP_SIZE / 2) canvas.set_color(rect, color) return rect def center_stamp(canvas, stamp, x, y): """ Repositions the given stamp (rect) to be centered around the given location. """ canvas.moveto(stamp, x - canvas.get_width(stamp) / 2, y - canvas.get_height(stamp) / 2) if __name__ == "__main__": main()