17db96d56Sopenharmony_ci#!/usr/bin/env python3
27db96d56Sopenharmony_ci# -*- coding: cp1252 -*-
37db96d56Sopenharmony_ci"""       turtle-example-suite:
47db96d56Sopenharmony_ci
57db96d56Sopenharmony_ci             tdemo_clock.py
67db96d56Sopenharmony_ci
77db96d56Sopenharmony_ciEnhanced clock-program, showing date
87db96d56Sopenharmony_ciand time
97db96d56Sopenharmony_ci  ------------------------------------
107db96d56Sopenharmony_ci   Press STOP to exit the program!
117db96d56Sopenharmony_ci  ------------------------------------
127db96d56Sopenharmony_ci"""
137db96d56Sopenharmony_cifrom turtle import *
147db96d56Sopenharmony_cifrom datetime import datetime
157db96d56Sopenharmony_ci
167db96d56Sopenharmony_cidef jump(distanz, winkel=0):
177db96d56Sopenharmony_ci    penup()
187db96d56Sopenharmony_ci    right(winkel)
197db96d56Sopenharmony_ci    forward(distanz)
207db96d56Sopenharmony_ci    left(winkel)
217db96d56Sopenharmony_ci    pendown()
227db96d56Sopenharmony_ci
237db96d56Sopenharmony_cidef hand(laenge, spitze):
247db96d56Sopenharmony_ci    fd(laenge*1.15)
257db96d56Sopenharmony_ci    rt(90)
267db96d56Sopenharmony_ci    fd(spitze/2.0)
277db96d56Sopenharmony_ci    lt(120)
287db96d56Sopenharmony_ci    fd(spitze)
297db96d56Sopenharmony_ci    lt(120)
307db96d56Sopenharmony_ci    fd(spitze)
317db96d56Sopenharmony_ci    lt(120)
327db96d56Sopenharmony_ci    fd(spitze/2.0)
337db96d56Sopenharmony_ci
347db96d56Sopenharmony_cidef make_hand_shape(name, laenge, spitze):
357db96d56Sopenharmony_ci    reset()
367db96d56Sopenharmony_ci    jump(-laenge*0.15)
377db96d56Sopenharmony_ci    begin_poly()
387db96d56Sopenharmony_ci    hand(laenge, spitze)
397db96d56Sopenharmony_ci    end_poly()
407db96d56Sopenharmony_ci    hand_form = get_poly()
417db96d56Sopenharmony_ci    register_shape(name, hand_form)
427db96d56Sopenharmony_ci
437db96d56Sopenharmony_cidef clockface(radius):
447db96d56Sopenharmony_ci    reset()
457db96d56Sopenharmony_ci    pensize(7)
467db96d56Sopenharmony_ci    for i in range(60):
477db96d56Sopenharmony_ci        jump(radius)
487db96d56Sopenharmony_ci        if i % 5 == 0:
497db96d56Sopenharmony_ci            fd(25)
507db96d56Sopenharmony_ci            jump(-radius-25)
517db96d56Sopenharmony_ci        else:
527db96d56Sopenharmony_ci            dot(3)
537db96d56Sopenharmony_ci            jump(-radius)
547db96d56Sopenharmony_ci        rt(6)
557db96d56Sopenharmony_ci
567db96d56Sopenharmony_cidef setup():
577db96d56Sopenharmony_ci    global second_hand, minute_hand, hour_hand, writer
587db96d56Sopenharmony_ci    mode("logo")
597db96d56Sopenharmony_ci    make_hand_shape("second_hand", 125, 25)
607db96d56Sopenharmony_ci    make_hand_shape("minute_hand",  130, 25)
617db96d56Sopenharmony_ci    make_hand_shape("hour_hand", 90, 25)
627db96d56Sopenharmony_ci    clockface(160)
637db96d56Sopenharmony_ci    second_hand = Turtle()
647db96d56Sopenharmony_ci    second_hand.shape("second_hand")
657db96d56Sopenharmony_ci    second_hand.color("gray20", "gray80")
667db96d56Sopenharmony_ci    minute_hand = Turtle()
677db96d56Sopenharmony_ci    minute_hand.shape("minute_hand")
687db96d56Sopenharmony_ci    minute_hand.color("blue1", "red1")
697db96d56Sopenharmony_ci    hour_hand = Turtle()
707db96d56Sopenharmony_ci    hour_hand.shape("hour_hand")
717db96d56Sopenharmony_ci    hour_hand.color("blue3", "red3")
727db96d56Sopenharmony_ci    for hand in second_hand, minute_hand, hour_hand:
737db96d56Sopenharmony_ci        hand.resizemode("user")
747db96d56Sopenharmony_ci        hand.shapesize(1, 1, 3)
757db96d56Sopenharmony_ci        hand.speed(0)
767db96d56Sopenharmony_ci    ht()
777db96d56Sopenharmony_ci    writer = Turtle()
787db96d56Sopenharmony_ci    #writer.mode("logo")
797db96d56Sopenharmony_ci    writer.ht()
807db96d56Sopenharmony_ci    writer.pu()
817db96d56Sopenharmony_ci    writer.bk(85)
827db96d56Sopenharmony_ci
837db96d56Sopenharmony_cidef wochentag(t):
847db96d56Sopenharmony_ci    wochentag = ["Monday", "Tuesday", "Wednesday",
857db96d56Sopenharmony_ci        "Thursday", "Friday", "Saturday", "Sunday"]
867db96d56Sopenharmony_ci    return wochentag[t.weekday()]
877db96d56Sopenharmony_ci
887db96d56Sopenharmony_cidef datum(z):
897db96d56Sopenharmony_ci    monat = ["Jan.", "Feb.", "Mar.", "Apr.", "May", "June",
907db96d56Sopenharmony_ci             "July", "Aug.", "Sep.", "Oct.", "Nov.", "Dec."]
917db96d56Sopenharmony_ci    j = z.year
927db96d56Sopenharmony_ci    m = monat[z.month - 1]
937db96d56Sopenharmony_ci    t = z.day
947db96d56Sopenharmony_ci    return "%s %d %d" % (m, t, j)
957db96d56Sopenharmony_ci
967db96d56Sopenharmony_cidef tick():
977db96d56Sopenharmony_ci    t = datetime.today()
987db96d56Sopenharmony_ci    sekunde = t.second + t.microsecond*0.000001
997db96d56Sopenharmony_ci    minute = t.minute + sekunde/60.0
1007db96d56Sopenharmony_ci    stunde = t.hour + minute/60.0
1017db96d56Sopenharmony_ci    try:
1027db96d56Sopenharmony_ci        tracer(False)  # Terminator can occur here
1037db96d56Sopenharmony_ci        writer.clear()
1047db96d56Sopenharmony_ci        writer.home()
1057db96d56Sopenharmony_ci        writer.forward(65)
1067db96d56Sopenharmony_ci        writer.write(wochentag(t),
1077db96d56Sopenharmony_ci                     align="center", font=("Courier", 14, "bold"))
1087db96d56Sopenharmony_ci        writer.back(150)
1097db96d56Sopenharmony_ci        writer.write(datum(t),
1107db96d56Sopenharmony_ci                     align="center", font=("Courier", 14, "bold"))
1117db96d56Sopenharmony_ci        writer.forward(85)
1127db96d56Sopenharmony_ci        second_hand.setheading(6*sekunde)  # or here
1137db96d56Sopenharmony_ci        minute_hand.setheading(6*minute)
1147db96d56Sopenharmony_ci        hour_hand.setheading(30*stunde)
1157db96d56Sopenharmony_ci        tracer(True)
1167db96d56Sopenharmony_ci        ontimer(tick, 100)
1177db96d56Sopenharmony_ci    except Terminator:
1187db96d56Sopenharmony_ci        pass  # turtledemo user pressed STOP
1197db96d56Sopenharmony_ci
1207db96d56Sopenharmony_cidef main():
1217db96d56Sopenharmony_ci    tracer(False)
1227db96d56Sopenharmony_ci    setup()
1237db96d56Sopenharmony_ci    tracer(True)
1247db96d56Sopenharmony_ci    tick()
1257db96d56Sopenharmony_ci    return "EVENTLOOP"
1267db96d56Sopenharmony_ci
1277db96d56Sopenharmony_ciif __name__ == "__main__":
1287db96d56Sopenharmony_ci    mode("logo")
1297db96d56Sopenharmony_ci    msg = main()
1307db96d56Sopenharmony_ci    print(msg)
1317db96d56Sopenharmony_ci    mainloop()
132