Canvas Groups

   1 # Andrew McVeigh
   2 from Tkinter import *
   3 from Canvas import *
   4 from time import time
   5 
   6 # define a mouse handling class
   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         # make a frame and a canvas and some buttons
  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         # time the creation of the rectangles
  48         start = time()
  49         self.makeShapes()
  50         print "Took ", time() - start, " seconds to make", self.layers,"layers"
  51 
  52     def makeShapes(self):
  53         # make 100 rectangles
  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 

tkinter: CanvasGroups (last edited 2011-06-05 22:55:44 by AnthonyMuss)