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