| 
									
										
										
										
											2010-03-11 22:53:45 +00:00
										 |  |  | #!/usr/bin/env python3 | 
					
						
							| 
									
										
										
										
											2008-06-10 04:44:07 +00:00
										 |  |  | # -*- coding: cp1252 -*- | 
					
						
							|  |  |  | """       turtle-example-suite:
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |              tdemo_clock.py | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Enhanced clock-program, showing date | 
					
						
							|  |  |  | and time | 
					
						
							|  |  |  |   ------------------------------------ | 
					
						
							|  |  |  |    Press STOP to exit the program! | 
					
						
							|  |  |  |   ------------------------------------ | 
					
						
							|  |  |  | """
 | 
					
						
							| 
									
										
										
										
											2008-09-21 07:32:10 +00:00
										 |  |  | from turtle import * | 
					
						
							| 
									
										
										
										
											2008-06-10 04:44:07 +00:00
										 |  |  | from datetime import datetime | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | mode("logo") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def jump(distanz, winkel=0): | 
					
						
							|  |  |  |     penup() | 
					
						
							|  |  |  |     right(winkel) | 
					
						
							|  |  |  |     forward(distanz) | 
					
						
							|  |  |  |     left(winkel) | 
					
						
							|  |  |  |     pendown() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def hand(laenge, spitze): | 
					
						
							|  |  |  |     fd(laenge*1.15) | 
					
						
							|  |  |  |     rt(90) | 
					
						
							|  |  |  |     fd(spitze/2.0) | 
					
						
							|  |  |  |     lt(120) | 
					
						
							|  |  |  |     fd(spitze) | 
					
						
							|  |  |  |     lt(120) | 
					
						
							|  |  |  |     fd(spitze) | 
					
						
							|  |  |  |     lt(120) | 
					
						
							|  |  |  |     fd(spitze/2.0) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def make_hand_shape(name, laenge, spitze): | 
					
						
							|  |  |  |     reset() | 
					
						
							|  |  |  |     jump(-laenge*0.15) | 
					
						
							|  |  |  |     begin_poly() | 
					
						
							|  |  |  |     hand(laenge, spitze) | 
					
						
							|  |  |  |     end_poly() | 
					
						
							|  |  |  |     hand_form = get_poly() | 
					
						
							|  |  |  |     register_shape(name, hand_form) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def clockface(radius): | 
					
						
							|  |  |  |     reset() | 
					
						
							|  |  |  |     pensize(7) | 
					
						
							|  |  |  |     for i in range(60): | 
					
						
							|  |  |  |         jump(radius) | 
					
						
							|  |  |  |         if i % 5 == 0: | 
					
						
							|  |  |  |             fd(25) | 
					
						
							|  |  |  |             jump(-radius-25) | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             dot(3) | 
					
						
							|  |  |  |             jump(-radius) | 
					
						
							|  |  |  |         rt(6) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def setup(): | 
					
						
							|  |  |  |     global second_hand, minute_hand, hour_hand, writer | 
					
						
							|  |  |  |     mode("logo") | 
					
						
							|  |  |  |     make_hand_shape("second_hand", 125, 25) | 
					
						
							|  |  |  |     make_hand_shape("minute_hand",  130, 25) | 
					
						
							|  |  |  |     make_hand_shape("hour_hand", 90, 25) | 
					
						
							|  |  |  |     clockface(160) | 
					
						
							|  |  |  |     second_hand = Turtle() | 
					
						
							|  |  |  |     second_hand.shape("second_hand") | 
					
						
							|  |  |  |     second_hand.color("gray20", "gray80") | 
					
						
							|  |  |  |     minute_hand = Turtle() | 
					
						
							|  |  |  |     minute_hand.shape("minute_hand") | 
					
						
							|  |  |  |     minute_hand.color("blue1", "red1") | 
					
						
							|  |  |  |     hour_hand = Turtle() | 
					
						
							|  |  |  |     hour_hand.shape("hour_hand") | 
					
						
							|  |  |  |     hour_hand.color("blue3", "red3") | 
					
						
							|  |  |  |     for hand in second_hand, minute_hand, hour_hand: | 
					
						
							|  |  |  |         hand.resizemode("user") | 
					
						
							|  |  |  |         hand.shapesize(1, 1, 3) | 
					
						
							|  |  |  |         hand.speed(0) | 
					
						
							|  |  |  |     ht() | 
					
						
							|  |  |  |     writer = Turtle() | 
					
						
							|  |  |  |     #writer.mode("logo") | 
					
						
							|  |  |  |     writer.ht() | 
					
						
							|  |  |  |     writer.pu() | 
					
						
							|  |  |  |     writer.bk(85) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def wochentag(t): | 
					
						
							|  |  |  |     wochentag = ["Monday", "Tuesday", "Wednesday", | 
					
						
							|  |  |  |         "Thursday", "Friday", "Saturday", "Sunday"] | 
					
						
							|  |  |  |     return wochentag[t.weekday()] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def datum(z): | 
					
						
							|  |  |  |     monat = ["Jan.", "Feb.", "Mar.", "Apr.", "May", "June", | 
					
						
							|  |  |  |              "July", "Aug.", "Sep.", "Oct.", "Nov.", "Dec."] | 
					
						
							|  |  |  |     j = z.year | 
					
						
							|  |  |  |     m = monat[z.month - 1] | 
					
						
							|  |  |  |     t = z.day | 
					
						
							|  |  |  |     return "%s %d %d" % (m, t, j) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def tick(): | 
					
						
							|  |  |  |     t = datetime.today() | 
					
						
							|  |  |  |     sekunde = t.second + t.microsecond*0.000001 | 
					
						
							|  |  |  |     minute = t.minute + sekunde/60.0 | 
					
						
							|  |  |  |     stunde = t.hour + minute/60.0 | 
					
						
							|  |  |  |     tracer(False) | 
					
						
							|  |  |  |     writer.clear() | 
					
						
							|  |  |  |     writer.home() | 
					
						
							|  |  |  |     writer.forward(65) | 
					
						
							|  |  |  |     writer.write(wochentag(t), | 
					
						
							|  |  |  |                  align="center", font=("Courier", 14, "bold")) | 
					
						
							|  |  |  |     writer.back(150) | 
					
						
							|  |  |  |     writer.write(datum(t), | 
					
						
							|  |  |  |                  align="center", font=("Courier", 14, "bold")) | 
					
						
							|  |  |  |     writer.forward(85) | 
					
						
							|  |  |  |     tracer(True) | 
					
						
							|  |  |  |     second_hand.setheading(6*sekunde) | 
					
						
							|  |  |  |     minute_hand.setheading(6*minute) | 
					
						
							|  |  |  |     hour_hand.setheading(30*stunde) | 
					
						
							|  |  |  |     tracer(True) | 
					
						
							|  |  |  |     ontimer(tick, 100) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def main(): | 
					
						
							|  |  |  |     tracer(False) | 
					
						
							|  |  |  |     setup() | 
					
						
							|  |  |  |     tracer(True) | 
					
						
							|  |  |  |     tick() | 
					
						
							|  |  |  |     return "EVENTLOOP" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if __name__ == "__main__": | 
					
						
							|  |  |  |     msg = main() | 
					
						
							|  |  |  |     print(msg) | 
					
						
							|  |  |  |     mainloop() |