Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python2
- # -*- coding: utf-8 -*-
- from Tkinter import Tk, Canvas
- from math import cos, sin, sqrt, radians
- from time import sleep
- class App:
- def __init__(self, master):
- self.master = master
- self.width = {"start": 0, "end": 640}
- self.height = {"start": 0, "end": 480}
- self.canvas = Canvas(master)
- self.canvas.configure({"bg": "white"})
- self.canvas.pack({"fill": "both", "expand": True})
- # widget sizes
- w = self.width['end']
- h = self.height['end']
- # define section =) #define Yes 1 #define No 0 ;-)
- self.offset = 70
- self.center = {"x": 0+self.offset, "y": h/2}
- self.radius = 50
- self.line_length = 23
- self.truck = [
- (-self.line_length,-self.radius),
- (+self.line_length,-self.radius),
- (+self.radius,-self.line_length),
- (+self.radius,+self.line_length),
- (+self.line_length,+self.radius),
- (-self.line_length,+self.radius),
- (-self.radius,+self.line_length),
- (-self.radius,-self.line_length),
- # double this point to close circuit
- (-self.line_length,-self.radius)
- ]
- # Tk bindings
- self.__bindings(master)
- # need first run to redraw
- self.__draw()
- # self.__draw_loop()
- """SLOT to update when window is resizing"""
- def __update_coords(self, event):
- # bind event, to update coordinates
- self.width['end'] = event.width
- self.height['end'] = event.height
- # self.canvas.update_idletasks()
- self.__draw()
- def __draw(self, event=None):
- self.canvas.delete("all")
- # widget sizes
- w = self.width['end']
- h = self.height['end']
- truck = self.truck
- radius = self.radius
- line_length = self.line_length
- center = self.center
- offset = self.offset
- for i in xrange(len(truck)):
- # check the last item
- try:
- if i == 0:
- color = "blue"
- else:
- color = "black"
- self.canvas.create_line(center['x']+truck[i][0], center['y']+truck[i][1],
- center['x']+truck[i+1][0], center['y']+truck[i+1][1],
- tag="border")
- self.canvas.create_line(center['x'], center['y'],
- center['x']+truck[i][0], center['y']+truck[i][1],
- fill=color, tag="diagonal")
- except:
- pass
- # draw dash line.
- self.canvas.create_line(
- 0+offset, h/2,
- w-offset, h/2,
- tags="line",
- fill="blue",
- width="2.0",
- dash="5",
- )
- def __rotate_truck(self, degree=10):
- for i in xrange(len(self.truck)):
- self.truck[i] = self.__matrix_multiplication(self.truck[i], radians(degree))
- def __move_point(self, points=1):
- self.center['x'] += points
- def __draw_loop(self, event=None):
- # sleep(5.50)
- print "Run loop"
- while 1:
- self.canvas.delete("all || !line")
- self.__rotate_truck(1.8)
- self.__move_point(2)
- self.__draw()
- self.canvas.update_idletasks()
- self.master.update_idletasks()
- # sleep(0.01)
- if self.center['x']+self.offset >= self.width['end']:
- # self.center['x'] = 0+self.offset
- break
- def __bindings(self, master):
- # binding master window resize
- # master.bind("<Configure>", self.__update_coords)
- # master.bind("<Configure>", self.__draw)
- self.canvas.bind("<Button-1>", self.__draw_loop)
- def __matrix_multiplication(self, point, degree):
- a11 = point[0]
- a12 = point[1]
- a13 = 1
- b11 = cos(degree)
- b12 = sin(degree)
- b13 = 0
- b21 = -sin(degree)
- b22 = cos(degree)
- b23 = 0
- b31 = 0
- b32 = 0
- b33 = 1
- return a11*b11+a12*b21+a13*b31 , a11*b12+a12*b22+a13*b32
- root = Tk()
- root.title("MachineGraphics. Lab2. Variant 2")
- root.geometry("640x480-0+20")
- app = App(root)
- root.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement