-
Notifications
You must be signed in to change notification settings - Fork 0
/
rectangle.py
116 lines (94 loc) · 2.9 KB
/
rectangle.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
from point import *
class Rectangle:
def __init__(self, x1, y1, x2, y2):
self.x1 = x1
self.y1 = y1
self.x2 = x2
self.y2 = y2
self.id = -1 # Canvas id after draw
def move(self, dx, dy):
"Move rectangle by dx and dy"
self.x1 += dx
self.y1 += dy
self.x2 += dx
self.y2 += dy
def area(self):
return (self.x2 - self.x1) * (self.y2 - self.y1)
def width(self):
return self.x2 - self.x1
def height(self):
return self.y2 - self.y1
def coords(self):
return [self.x1, self.y1, self.x2, self.y2]
def center(self):
"Get the center point"
x = (self.x1 + self.x2) / 2
y = (self.y1 + self.y2) / 2
return Point(x,y)
def center_coords(self):
"Get the center coordinates"
x = (self.x1 + self.x2) / 2
y = (self.y1 + self.y2) / 2
return x,y
def place(self, x, y):
"Place the rectangle at a new origin (x1=x, y1=y)"
w = self.width()
h = self.height()
self.x1 = x
self.y1 = y
self.x2 = x + w
self.y2 = y + h
def draw(self, canvas, **kwargs):
id = canvas.create_rectangle(self.x1, self.y1, self.x2, self.y2, **kwargs)
self.id = id
return id
def config(self, **kwargs):
canvas.itemconfig(self.id, **kwargs)
# this is how a Rectangle object will be printed with the Python print statement:
def __str__(self):
return "Rectangle(%d,%d,%d,%d)" % (self.x1, self.y1, self.x2, self.y2)
#--------------------------------------------------
def test1():
r = Rectangle(30, 20 ,80, 70)
print(r)
print("Area =", r.area())
print("Width =", r.width())
print("Height =", r.height())
r.move(15,25)
print(r)
print("Area =", r.area())
print("Width =", r.width())
print("Height =", r.height())
def test2():
r = Rectangle(30, 20 ,80, 70)
print(r)
assert r.area() == 2500
assert r.width() == 50
assert r.height() == 50
r.move(15,25)
assert r.x1 == 45
assert r.y2 == 95
assert r.area() == 2500
print("Test PASSED")
# This is the solution to problem 10 in project #3, so please don't read it before you try it!
def test3():
r = Rectangle(10, 10 ,160, 130)
for i in range(25):
r.move(9,6)
r.draw(canvas, fill="gray97")
app.mainloop()
# This is the solution to problem 10 in project #3, in slow motion ...
def test4():
import time
r = Rectangle(10, 10 ,160, 130)
for i in range(25):
r.move(9,6)
time.sleep(0.08)
r.draw(canvas, fill="gray97")
canvas.update()
app.mainloop()
if __name__ == "__main__":
from eda_canvas import eda_canvas
app = eda_canvas()
canvas = app.canvas
test4()