1
2 from Tkinter import *
3 from Canvas import *
4 from time import time
5
6
7 class MouseHandler:
8 group = lastX = lastY = 0
9
10 def __init__(self, group):
11 self.group = group
12 group.bind('<1>', self.click)
13 group.bind('<B1-Motion>', self.move)
14
15 def click(self, event):
16 self.lastX = event.x
17 self.lastY = event.y
18
19 def move(self, event):
20 self.group.move(event.x - self.lastX, event.y - self.lastY)
21 self.click(event)
22
23 class CanvasDemo:
24
25 colors = ["pink", "grey", "yellow", "green", "red", "purple", "cyan",
26 "pink", "grey", "yellow", "green", "red", "purple", "cyan",
27 "pink", "grey", "yellow", "green", "red", "purple", "cyan"]
28 layers = 5
29 root = canvas = groups = None
30
31 def __init__(self, root):
32 self.root = root
33
34
35 frame = Frame(self.root)
36 frame.pack(fill=X)
37 label = Label(frame, text="Canvas test")
38 label.pack()
39 self.canvas = Canvas(frame, bg="grey", width=600, height=600)
40 self.canvas.pack()
41 cmd = Button(frame, text="Scale", command=self.scale)
42 cmd.pack()
43 self.groups = []
44 for i in range(self.layers):
45 self.groups.append(Group(self.canvas))
46
47
48 start = time()
49 self.makeShapes()
50 print "Took ", time() - start, " seconds to make", self.layers,"layers"
51
52 def makeShapes(self):
53
54 for group in range(self.layers):
55 actual = self.groups[group]
56 MouseHandler(actual)
57 for i1 in range(10):
58 for i2 in range(10):
59 makeRectangle(self.canvas, actual, i1*40+10+group*20,
60 i2*40+10+group*5,
61 35, 35, self.colors[group], 2)
62
63 def scale(self):
64 for group in self.groups:
65 group.scale(0, 0, 1.1, 1.1)
66
67
68 def makeRectangle(canvas, group, left, top, width, height, color,thickness=2):
69 rect = Rectangle(canvas, left,top, left+width,top+height,
70 fill=color, width=thickness)
71 line = Line(canvas, left,top+height, left,top, left+width,top,
72 width=thickness, fill="white")
73 text = CanvasText(canvas, left+17, top+10, text="Hello!",fill="white")
74 for shape in [rect, line, text]:
75 group.addtag_withtag(shape)
76
77
78 if __name__ == '__main__':
79 print "Canvas Demonstration"
80 root = Tk()
81 demo = CanvasDemo(root)
82 root.mainloop()
83