| #!/usr/bin/env python3 |
| # -*- coding: cp1252 -*- |
| """ turtle-example-suite: |
| |
| tdemo_clock.py |
| |
| Enhanced clock-program, showing date |
| and time |
| ------------------------------------ |
| Press STOP to exit the program! |
| ------------------------------------ |
| """ |
| from turtle import * |
| from datetime import datetime |
| |
| 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 |
| try: |
| tracer(False) # Terminator can occur here |
| 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) # or here |
| minute_hand.setheading(6*minute) |
| hour_hand.setheading(30*stunde) |
| tracer(True) |
| ontimer(tick, 100) |
| except Terminator: |
| pass # turtledemo user pressed STOP |
| |
| def main(): |
| tracer(False) |
| setup() |
| tracer(True) |
| tick() |
| return "EVENTLOOP" |
| |
| if __name__ == "__main__": |
| mode("logo") |
| msg = main() |
| print(msg) |
| mainloop() |