| 1 | from Tkinter import *
|
|---|
| 2 |
|
|---|
| 3 | # this file demonstrates the movement of a single canvas item under mouse control
|
|---|
| 4 |
|
|---|
| 5 | class Test(Frame):
|
|---|
| 6 | ###################################################################
|
|---|
| 7 | ###### Event callbacks for THE CANVAS (not the stuff drawn on it)
|
|---|
| 8 | ###################################################################
|
|---|
| 9 | def mouseDown(self, event):
|
|---|
| 10 | # remember where the mouse went down
|
|---|
| 11 | self.lastx = event.x
|
|---|
| 12 | self.lasty = event.y
|
|---|
| 13 |
|
|---|
| 14 | def mouseMove(self, event):
|
|---|
| 15 | # whatever the mouse is over gets tagged as CURRENT for free by tk.
|
|---|
| 16 | self.draw.move(CURRENT, event.x - self.lastx, event.y - self.lasty)
|
|---|
| 17 | self.lastx = event.x
|
|---|
| 18 | self.lasty = event.y
|
|---|
| 19 |
|
|---|
| 20 | ###################################################################
|
|---|
| 21 | ###### Event callbacks for canvas ITEMS (stuff drawn on the canvas)
|
|---|
| 22 | ###################################################################
|
|---|
| 23 | def mouseEnter(self, event):
|
|---|
| 24 | # the CURRENT tag is applied to the object the cursor is over.
|
|---|
| 25 | # this happens automatically.
|
|---|
| 26 | self.draw.itemconfig(CURRENT, fill="red")
|
|---|
| 27 |
|
|---|
| 28 | def mouseLeave(self, event):
|
|---|
| 29 | # the CURRENT tag is applied to the object the cursor is over.
|
|---|
| 30 | # this happens automatically.
|
|---|
| 31 | self.draw.itemconfig(CURRENT, fill="blue")
|
|---|
| 32 |
|
|---|
| 33 | def createWidgets(self):
|
|---|
| 34 | self.QUIT = Button(self, text='QUIT', foreground='red',
|
|---|
| 35 | command=self.quit)
|
|---|
| 36 | self.QUIT.pack(side=LEFT, fill=BOTH)
|
|---|
| 37 | self.draw = Canvas(self, width="5i", height="5i")
|
|---|
| 38 | self.draw.pack(side=LEFT)
|
|---|
| 39 |
|
|---|
| 40 | fred = self.draw.create_oval(0, 0, 20, 20,
|
|---|
| 41 | fill="green", tags="selected")
|
|---|
| 42 |
|
|---|
| 43 | self.draw.tag_bind(fred, "<Any-Enter>", self.mouseEnter)
|
|---|
| 44 | self.draw.tag_bind(fred, "<Any-Leave>", self.mouseLeave)
|
|---|
| 45 |
|
|---|
| 46 | Widget.bind(self.draw, "<1>", self.mouseDown)
|
|---|
| 47 | Widget.bind(self.draw, "<B1-Motion>", self.mouseMove)
|
|---|
| 48 |
|
|---|
| 49 | def __init__(self, master=None):
|
|---|
| 50 | Frame.__init__(self, master)
|
|---|
| 51 | Pack.config(self)
|
|---|
| 52 | self.createWidgets()
|
|---|
| 53 |
|
|---|
| 54 | test = Test()
|
|---|
| 55 | test.mainloop()
|
|---|