|
1 #!/usr/bin/python |
|
2 # -*- coding: cp1252 -*- |
|
3 """ turtle-example-suite: |
|
4 |
|
5 tdemo_clock.py |
|
6 |
|
7 Enhanced clock-program, showing date |
|
8 and time |
|
9 ------------------------------------ |
|
10 Press STOP to exit the program! |
|
11 ------------------------------------ |
|
12 """ |
|
13 from turtle import * |
|
14 from datetime import datetime |
|
15 |
|
16 mode("logo") |
|
17 |
|
18 def jump(distanz, winkel=0): |
|
19 penup() |
|
20 right(winkel) |
|
21 forward(distanz) |
|
22 left(winkel) |
|
23 pendown() |
|
24 |
|
25 def hand(laenge, spitze): |
|
26 fd(laenge*1.15) |
|
27 rt(90) |
|
28 fd(spitze/2.0) |
|
29 lt(120) |
|
30 fd(spitze) |
|
31 lt(120) |
|
32 fd(spitze) |
|
33 lt(120) |
|
34 fd(spitze/2.0) |
|
35 |
|
36 def make_hand_shape(name, laenge, spitze): |
|
37 reset() |
|
38 jump(-laenge*0.15) |
|
39 begin_poly() |
|
40 hand(laenge, spitze) |
|
41 end_poly() |
|
42 hand_form = get_poly() |
|
43 register_shape(name, hand_form) |
|
44 |
|
45 |
|
46 def clockface(radius): |
|
47 reset() |
|
48 pensize(7) |
|
49 for i in range(60): |
|
50 jump(radius) |
|
51 if i % 5 == 0: |
|
52 fd(25) |
|
53 jump(-radius-25) |
|
54 else: |
|
55 dot(3) |
|
56 jump(-radius) |
|
57 rt(6) |
|
58 |
|
59 def setup(): |
|
60 global second_hand, minute_hand, hour_hand, writer |
|
61 mode("logo") |
|
62 make_hand_shape("second_hand", 125, 25) |
|
63 make_hand_shape("minute_hand", 130, 25) |
|
64 make_hand_shape("hour_hand", 90, 25) |
|
65 clockface(160) |
|
66 second_hand = Turtle() |
|
67 second_hand.shape("second_hand") |
|
68 second_hand.color("gray20", "gray80") |
|
69 minute_hand = Turtle() |
|
70 minute_hand.shape("minute_hand") |
|
71 minute_hand.color("blue1", "red1") |
|
72 hour_hand = Turtle() |
|
73 hour_hand.shape("hour_hand") |
|
74 hour_hand.color("blue3", "red3") |
|
75 for hand in second_hand, minute_hand, hour_hand: |
|
76 hand.resizemode("user") |
|
77 hand.shapesize(1, 1, 3) |
|
78 hand.speed(0) |
|
79 ht() |
|
80 writer = Turtle() |
|
81 #writer.mode("logo") |
|
82 writer.ht() |
|
83 writer.pu() |
|
84 writer.bk(85) |
|
85 |
|
86 |
|
87 def wochentag(t): |
|
88 wochentag = ["Monday", "Tuesday", "Wednesday", |
|
89 "Thursday", "Friday", "Saturday", "Sunday"] |
|
90 return wochentag[t.weekday()] |
|
91 |
|
92 def datum(z): |
|
93 monat = ["Jan.", "Feb.", "Mar.", "Apr.", "May", "June", |
|
94 "July", "Aug.", "Sep.", "Oct.", "Nov.", "Dec."] |
|
95 j = z.year |
|
96 m = monat[z.month - 1] |
|
97 t = z.day |
|
98 return "%s %d %d" % (m, t, j) |
|
99 |
|
100 def tick(): |
|
101 t = datetime.today() |
|
102 sekunde = t.second + t.microsecond*0.000001 |
|
103 minute = t.minute + sekunde/60.0 |
|
104 stunde = t.hour + minute/60.0 |
|
105 tracer(False) |
|
106 writer.clear() |
|
107 writer.home() |
|
108 writer.forward(65) |
|
109 writer.write(wochentag(t), |
|
110 align="center", font=("Courier", 14, "bold")) |
|
111 writer.back(150) |
|
112 writer.write(datum(t), |
|
113 align="center", font=("Courier", 14, "bold")) |
|
114 writer.forward(85) |
|
115 tracer(True) |
|
116 second_hand.setheading(6*sekunde) |
|
117 minute_hand.setheading(6*minute) |
|
118 hour_hand.setheading(30*stunde) |
|
119 tracer(True) |
|
120 ontimer(tick, 100) |
|
121 |
|
122 def main(): |
|
123 tracer(False) |
|
124 setup() |
|
125 tracer(True) |
|
126 tick() |
|
127 return "EVENTLOOP" |
|
128 |
|
129 if __name__ == "__main__": |
|
130 msg = main() |
|
131 print msg |
|
132 mainloop() |