symbian-qemu-0.9.1-12/python-2.6.1/Demo/tkinter/matt/canvas-mult-item-sel.py
changeset 1 2fb8b9db1c86
equal deleted inserted replaced
0:ffa851df0825 1:2fb8b9db1c86
       
     1 from Tkinter import *
       
     2 
       
     3 # allows moving dots with multiple selection.
       
     4 
       
     5 SELECTED_COLOR = "red"
       
     6 UNSELECTED_COLOR = "blue"
       
     7 
       
     8 class Test(Frame):
       
     9     ###################################################################
       
    10     ###### Event callbacks for THE CANVAS (not the stuff drawn on it)
       
    11     ###################################################################
       
    12     def mouseDown(self, event):
       
    13         # see if we're inside a dot. If we are, it
       
    14         # gets tagged as CURRENT for free by tk.
       
    15 
       
    16         if not event.widget.find_withtag(CURRENT):
       
    17             # we clicked outside of all dots on the canvas. unselect all.
       
    18 
       
    19             # re-color everything back to an unselected color
       
    20             self.draw.itemconfig("selected", fill=UNSELECTED_COLOR)
       
    21             # unselect everything
       
    22             self.draw.dtag("selected")
       
    23         else:
       
    24             # mark as "selected" the thing the cursor is under
       
    25             self.draw.addtag("selected", "withtag", CURRENT)
       
    26             # color it as selected
       
    27             self.draw.itemconfig("selected", fill=SELECTED_COLOR)
       
    28 
       
    29         self.lastx = event.x
       
    30         self.lasty = event.y
       
    31 
       
    32 
       
    33     def mouseMove(self, event):
       
    34         self.draw.move("selected", event.x - self.lastx, event.y - self.lasty)
       
    35         self.lastx = event.x
       
    36         self.lasty = event.y
       
    37 
       
    38     def makeNewDot(self):
       
    39         # create a dot, and mark it as current
       
    40         fred = self.draw.create_oval(0, 0, 20, 20,
       
    41                                      fill=SELECTED_COLOR, tags=CURRENT)
       
    42         # and make it selected
       
    43         self.draw.addtag("selected", "withtag", CURRENT)
       
    44 
       
    45     def createWidgets(self):
       
    46         self.QUIT = Button(self, text='QUIT', foreground='red',
       
    47                            command=self.quit)
       
    48 
       
    49         ################
       
    50         # make the canvas and bind some behavior to it
       
    51         ################
       
    52         self.draw = Canvas(self, width="5i", height="5i")
       
    53         Widget.bind(self.draw, "<1>", self.mouseDown)
       
    54         Widget.bind(self.draw, "<B1-Motion>", self.mouseMove)
       
    55 
       
    56         # and other things.....
       
    57         self.button = Button(self, text="make a new dot", foreground="blue",
       
    58                              command=self.makeNewDot)
       
    59 
       
    60         message = ("%s dots are selected and can be dragged.\n"
       
    61                    "%s are not selected.\n"
       
    62                    "Click in a dot to select it.\n"
       
    63                    "Click on empty space to deselect all dots."
       
    64                    ) % (SELECTED_COLOR, UNSELECTED_COLOR)
       
    65         self.label = Message(self, width="5i", text=message)
       
    66 
       
    67         self.QUIT.pack(side=BOTTOM, fill=BOTH)
       
    68         self.label.pack(side=BOTTOM, fill=X, expand=1)
       
    69         self.button.pack(side=BOTTOM, fill=X)
       
    70         self.draw.pack(side=LEFT)
       
    71 
       
    72     def __init__(self, master=None):
       
    73         Frame.__init__(self, master)
       
    74         Pack.config(self)
       
    75         self.createWidgets()
       
    76 
       
    77 test = Test()
       
    78 test.mainloop()