~ubuntu-branches/ubuntu/maverick/python3.1/maverick

« back to all changes in this revision

Viewing changes to Demo/tkinter/matt/canvas-mult-item-sel.py

  • Committer: Bazaar Package Importer
  • Author(s): Matthias Klose
  • Date: 2009-03-23 00:01:27 UTC
  • Revision ID: james.westby@ubuntu.com-20090323000127-5fstfxju4ufrhthq
Tags: upstream-3.1~a1+20090322
ImportĀ upstreamĀ versionĀ 3.1~a1+20090322

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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()