135820f77e41a8a41a695e08c041eed5e2e2ff3efGuido van Rossumfrom Tkinter import * 235820f77e41a8a41a695e08c041eed5e2e2ff3efGuido van Rossum 335820f77e41a8a41a695e08c041eed5e2e2ff3efGuido van Rossum# this file demonstrates the movement of a single canvas item under mouse control 435820f77e41a8a41a695e08c041eed5e2e2ff3efGuido van Rossum 535820f77e41a8a41a695e08c041eed5e2e2ff3efGuido van Rossumclass Test(Frame): 635820f77e41a8a41a695e08c041eed5e2e2ff3efGuido van Rossum ################################################################### 735820f77e41a8a41a695e08c041eed5e2e2ff3efGuido van Rossum ###### Event callbacks for THE CANVAS (not the stuff drawn on it) 835820f77e41a8a41a695e08c041eed5e2e2ff3efGuido van Rossum ################################################################### 935820f77e41a8a41a695e08c041eed5e2e2ff3efGuido van Rossum def mouseDown(self, event): 10182b5aca27d376b08a2904bed42b751496f932f3Tim Peters # remember where the mouse went down 11182b5aca27d376b08a2904bed42b751496f932f3Tim Peters self.lastx = event.x 12182b5aca27d376b08a2904bed42b751496f932f3Tim Peters self.lasty = event.y 1389cb67bb642ee958d9f095728c99e943e994ca54Guido van Rossum 1435820f77e41a8a41a695e08c041eed5e2e2ff3efGuido van Rossum def mouseMove(self, event): 15182b5aca27d376b08a2904bed42b751496f932f3Tim Peters # whatever the mouse is over gets tagged as CURRENT for free by tk. 16182b5aca27d376b08a2904bed42b751496f932f3Tim Peters self.draw.move(CURRENT, event.x - self.lastx, event.y - self.lasty) 17182b5aca27d376b08a2904bed42b751496f932f3Tim Peters self.lastx = event.x 18182b5aca27d376b08a2904bed42b751496f932f3Tim Peters self.lasty = event.y 1935820f77e41a8a41a695e08c041eed5e2e2ff3efGuido van Rossum 2035820f77e41a8a41a695e08c041eed5e2e2ff3efGuido van Rossum ################################################################### 2135820f77e41a8a41a695e08c041eed5e2e2ff3efGuido van Rossum ###### Event callbacks for canvas ITEMS (stuff drawn on the canvas) 2235820f77e41a8a41a695e08c041eed5e2e2ff3efGuido van Rossum ################################################################### 2335820f77e41a8a41a695e08c041eed5e2e2ff3efGuido van Rossum def mouseEnter(self, event): 2489cb67bb642ee958d9f095728c99e943e994ca54Guido van Rossum # the CURRENT tag is applied to the object the cursor is over. 25182b5aca27d376b08a2904bed42b751496f932f3Tim Peters # this happens automatically. 26182b5aca27d376b08a2904bed42b751496f932f3Tim Peters self.draw.itemconfig(CURRENT, fill="red") 27182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 2835820f77e41a8a41a695e08c041eed5e2e2ff3efGuido van Rossum def mouseLeave(self, event): 29182b5aca27d376b08a2904bed42b751496f932f3Tim Peters # the CURRENT tag is applied to the object the cursor is over. 30182b5aca27d376b08a2904bed42b751496f932f3Tim Peters # this happens automatically. 31182b5aca27d376b08a2904bed42b751496f932f3Tim Peters self.draw.itemconfig(CURRENT, fill="blue") 3235820f77e41a8a41a695e08c041eed5e2e2ff3efGuido van Rossum 3335820f77e41a8a41a695e08c041eed5e2e2ff3efGuido van Rossum def createWidgets(self): 34182b5aca27d376b08a2904bed42b751496f932f3Tim Peters self.QUIT = Button(self, text='QUIT', foreground='red', 35182b5aca27d376b08a2904bed42b751496f932f3Tim Peters command=self.quit) 36182b5aca27d376b08a2904bed42b751496f932f3Tim Peters self.QUIT.pack(side=LEFT, fill=BOTH) 37182b5aca27d376b08a2904bed42b751496f932f3Tim Peters self.draw = Canvas(self, width="5i", height="5i") 38182b5aca27d376b08a2904bed42b751496f932f3Tim Peters self.draw.pack(side=LEFT) 3935820f77e41a8a41a695e08c041eed5e2e2ff3efGuido van Rossum 40182b5aca27d376b08a2904bed42b751496f932f3Tim Peters fred = self.draw.create_oval(0, 0, 20, 20, 41182b5aca27d376b08a2904bed42b751496f932f3Tim Peters fill="green", tags="selected") 4235820f77e41a8a41a695e08c041eed5e2e2ff3efGuido van Rossum 43182b5aca27d376b08a2904bed42b751496f932f3Tim Peters self.draw.tag_bind(fred, "<Any-Enter>", self.mouseEnter) 44182b5aca27d376b08a2904bed42b751496f932f3Tim Peters self.draw.tag_bind(fred, "<Any-Leave>", self.mouseLeave) 4535820f77e41a8a41a695e08c041eed5e2e2ff3efGuido van Rossum 46182b5aca27d376b08a2904bed42b751496f932f3Tim Peters Widget.bind(self.draw, "<1>", self.mouseDown) 47182b5aca27d376b08a2904bed42b751496f932f3Tim Peters Widget.bind(self.draw, "<B1-Motion>", self.mouseMove) 4835820f77e41a8a41a695e08c041eed5e2e2ff3efGuido van Rossum 4935820f77e41a8a41a695e08c041eed5e2e2ff3efGuido van Rossum def __init__(self, master=None): 50182b5aca27d376b08a2904bed42b751496f932f3Tim Peters Frame.__init__(self, master) 51182b5aca27d376b08a2904bed42b751496f932f3Tim Peters Pack.config(self) 52182b5aca27d376b08a2904bed42b751496f932f3Tim Peters self.createWidgets() 5335820f77e41a8a41a695e08c041eed5e2e2ff3efGuido van Rossum 5435820f77e41a8a41a695e08c041eed5e2e2ff3efGuido van Rossumtest = Test() 5535820f77e41a8a41a695e08c041eed5e2e2ff3efGuido van Rossumtest.mainloop() 56