PageRenderTime 19ms CodeModel.GetById 2ms app.highlight 12ms RepoModel.GetById 1ms app.codeStats 1ms

/Demo/tkinter/matt/canvas-moving-or-creating.py

http://unladen-swallow.googlecode.com/
Python | 62 lines | 33 code | 11 blank | 18 comment | 2 complexity | bc6e2257019ff8c8f2d33f4ca51467d9 MD5 | raw file
 1from Tkinter import *
 2
 3# this file demonstrates a more sophisticated movement --
 4# move dots or create new ones if you click outside the dots
 5
 6class Test(Frame):
 7    ###################################################################
 8    ###### Event callbacks for THE CANVAS (not the stuff drawn on it)
 9    ###################################################################
10    def mouseDown(self, event):
11        # see if we're inside a dot. If we are, it
12        # gets tagged as CURRENT for free by tk.
13        if not event.widget.find_withtag(CURRENT):
14            # there is no dot here, so we can make one,
15            # and bind some interesting behavior to it.
16            # ------
17            # create a dot, and mark it as CURRENT
18            fred = self.draw.create_oval(
19                event.x - 10, event.y -10, event.x +10, event.y + 10,
20                fill="green", tags=CURRENT)
21
22            self.draw.tag_bind(fred, "<Any-Enter>", self.mouseEnter)
23            self.draw.tag_bind(fred, "<Any-Leave>", self.mouseLeave)
24
25        self.lastx = event.x
26        self.lasty = event.y
27
28    def mouseMove(self, event):
29        self.draw.move(CURRENT, event.x - self.lastx, event.y - self.lasty)
30        self.lastx = event.x
31        self.lasty = event.y
32
33    ###################################################################
34    ###### Event callbacks for canvas ITEMS (stuff drawn on the canvas)
35    ###################################################################
36    def mouseEnter(self, event):
37        # the CURRENT tag is applied to the object the cursor is over.
38        # this happens automatically.
39        self.draw.itemconfig(CURRENT, fill="red")
40
41    def mouseLeave(self, event):
42        # the CURRENT tag is applied to the object the cursor is over.
43        # this happens automatically.
44        self.draw.itemconfig(CURRENT, fill="blue")
45
46    def createWidgets(self):
47        self.QUIT = Button(self, text='QUIT', foreground='red',
48                           command=self.quit)
49        self.QUIT.pack(side=LEFT, fill=BOTH)
50        self.draw = Canvas(self, width="5i", height="5i")
51        self.draw.pack(side=LEFT)
52
53        Widget.bind(self.draw, "<1>", self.mouseDown)
54        Widget.bind(self.draw, "<B1-Motion>", self.mouseMove)
55
56    def __init__(self, master=None):
57        Frame.__init__(self, master)
58        Pack.config(self)
59        self.createWidgets()
60
61test = Test()
62test.mainloop()