blob: a0d157ba49d2b3a91d28822e2696775b4bd83451 [file] [log] [blame]
Benjamin Peterson90f5ba52010-03-11 22:53:45 +00001#!/usr/bin/env python3
Martin v. Löwis97cf99f2008-06-10 04:44:07 +00002# -*- coding: cp1252 -*-
3""" turtle-example-suite:
4
5 tdemo_clock.py
6
7Enhanced clock-program, showing date
8and time
9 ------------------------------------
10 Press STOP to exit the program!
11 ------------------------------------
12"""
Martin v. Löwis60ebb8b2008-09-21 07:32:10 +000013from turtle import *
Martin v. Löwis97cf99f2008-06-10 04:44:07 +000014from datetime import datetime
15
16mode("logo")
17
18def jump(distanz, winkel=0):
19 penup()
20 right(winkel)
21 forward(distanz)
22 left(winkel)
23 pendown()
24
25def 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
36def 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
46def 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
59def 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
87def wochentag(t):
88 wochentag = ["Monday", "Tuesday", "Wednesday",
89 "Thursday", "Friday", "Saturday", "Sunday"]
90 return wochentag[t.weekday()]
91
92def 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
100def 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
122def main():
123 tracer(False)
124 setup()
125 tracer(True)
126 tick()
127 return "EVENTLOOP"
128
129if __name__ == "__main__":
130 msg = main()
131 print(msg)
132 mainloop()