Home | History | Annotate | Download | only in matt
      1 from Tkinter import *
      2 
      3 # this file demonstrates the creation of widgets as part of a canvas object
      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         # see if we're inside a dot. If we are, it
     11         # gets tagged as CURRENT for free by tk.
     12 
     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")
     21             self.draw.tag_bind(fred, "<Enter>", self.mouseEnter)
     22             self.draw.tag_bind(fred, "<Leave>", self.mouseLeave)
     23         self.lastx = event.x
     24         self.lasty = event.y
     25 
     26     def mouseMove(self, event):
     27         self.draw.move(CURRENT, event.x - self.lastx, event.y - self.lasty)
     28         self.lastx = event.x
     29         self.lasty = event.y
     30 
     31     ###################################################################
     32     ###### Event callbacks for canvas ITEMS (stuff drawn on the canvas)
     33     ###################################################################
     34     def mouseEnter(self, event):
     35         # the "current" tag is applied to the object the cursor is over.
     36         # this happens automatically.
     37         self.draw.itemconfig(CURRENT, fill="red")
     38         print self.draw.coords(CURRENT)
     39 
     40     def mouseLeave(self, event):
     41         # the "current" tag is applied to the object the cursor is over.
     42         # this happens automatically.
     43         self.draw.itemconfig(CURRENT, fill="blue")
     44 
     45     def createWidgets(self):
     46         self.QUIT = Button(self, text='QUIT', foreground='red',
     47                            command=self.quit)
     48         self.QUIT.pack(side=LEFT, fill=BOTH)
     49         self.draw = Canvas(self, width="5i", height="5i")
     50         self.draw.pack(side=LEFT)
     51 
     52         Widget.bind(self.draw, "<1>", self.mouseDown)
     53         Widget.bind(self.draw, "<B1-Motion>", self.mouseMove)
     54 
     55     def __init__(self, master=None):
     56         Frame.__init__(self, master)
     57         Pack.config(self)
     58         self.createWidgets()
     59 
     60 test = Test()
     61 test.mainloop()
     62