annotate Demo/turtle/tdemo_clock.py @ 54294:dba767bc3155 legacy-trunk

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