Advertisement
Guest User

test

a guest
Jan 1st, 2015
522
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.31 KB | None | 0 0
  1. import tkinter
  2.  
  3. class Polygon:
  4.  
  5.     def __init__(self, ax, ay, bx, by, cx, cy, dx=None, dy=None, color=None):
  6.         self.ax = ax
  7.         self.ay = ay
  8.         self.bx = bx
  9.         self.by = by
  10.         self.cx = cx
  11.         self.cy = cy
  12.         self.dx = dx
  13.         self.dy = dy
  14.         self.color = color
  15.  
  16.     def is_click(self, event, g, event_x, event_y):
  17.         widget_id = event.widget.find_closest(event.x, event.y)
  18.         print(widget_id)
  19.         g.move(widget_id, 1, 1) # just dummy move for a clicked widget
  20.         pass
  21.  
  22.     def paint(self, g):
  23.         self.g = g
  24.         if self.dx is None:
  25.             self.id = self.g.create_polygon(self.ax,self.ay,
  26.                                             self.bx,self.by,
  27.                                             self.cx,self.cy,
  28.                                             fill=self.color)
  29.         else:
  30.             self.id = self.g.create_polygon(self.ax,self.ay,
  31.                                             self.bx,self.by,
  32.                                             self.cx,self.cy,
  33.                                             self.dx,self.dy,
  34.                                             fill=self.color)
  35.  
  36.     def move(self, d_ax=0, d_ay=0, d_bx=0, d_by=0, d_cx=0, d_cy=0, d_dx=None, d_dy=None):
  37.         if d_dx is None:
  38.             self.ax += d_ax
  39.             self.ay += d_ay
  40.             self.bx += d_bx
  41.             self.by += d_by
  42.             self.cx += d_cx
  43.             self.cy += d_cy
  44.             self.g.move(self.id, d_ax, d_ay, d_bx, d_by, d_cx, d_cy)
  45.         else:
  46.             self.ax += d_ax
  47.             self.ay += d_ay
  48.             self.bx += d_bx
  49.             self.by += d_by
  50.             self.cx += d_cx
  51.             self.cy += d_cy
  52.             self.dx += d_dx
  53.             self.dy += d_dy
  54.             self.g.move(self.id, d_ax, d_ay, d_bx, d_by, d_cx, d_cy, d_dx, d_dy)
  55.  
  56.  
  57. class Tangram:
  58.  
  59.     def __init__(self):
  60.         self.array = []
  61.         self.g = tkinter.Canvas(width=800,height=800)
  62.         self.g.pack()
  63.  
  64.         #all objects
  65.         self.add(Polygon(500,300,625,175,750,300, color='SeaGreen'))
  66.         self.add(Polygon(750,50,625,175,750,300, color='Tomato'))
  67.         self.add(Polygon(500,175,562.6,237.5,500,300, color='SteelBlue'))
  68.         self.add(Polygon(500,175,562.5,237.5,625,175,562.5,112.5, color='FireBrick'))
  69.         self.add(Polygon(562.5,112.5,625,175,687.5,112.5, color='DarkMagenta'))
  70.         self.add(Polygon(500,50,500,175,625,50, color='Gold'))
  71.         self.add(Polygon(562.5,112.5,687.5,112.5,750,50,625,50, color='DarkTurquoise'))
  72.         #end of all objects
  73.  
  74.         self.g.bind('<Button-1>', self.event_move_start)
  75.  
  76.     def add(self, Object):
  77.         self.array.append(Object)
  78.         Object.paint(self.g)
  79.  
  80.     def event_move_start(self, event):
  81.         ix = len(self.array) - 1
  82.         while ix >= 0 and not self.array[ix].is_click(event, self.g, event.x, event.y):
  83.             ix -= 1
  84.         if ix < 0:
  85.             self.Object = None
  86.             return
  87.         self.Object = self.array[ix]
  88.         self.ex, self.ey = event.x, event.y
  89.         self.g.bind('<B1-Motion>', self.event_move)
  90.         self.g.bind('<ButtonRelease-1>', self.event_release)
  91.  
  92.     def event_move(self):
  93.         pass
  94.  
  95.     def event_release(self):
  96.         pass
  97.  
  98.  
  99.  
  100. root = tkinter.Tk()
  101.  
  102. p = Tangram()
  103.  
  104. root.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement