/Demo/turtle/tdemo_clock.py
http://unladen-swallow.googlecode.com/ · Python · 132 lines · 106 code · 13 blank · 13 comment · 5 complexity · b9784e7cd91d146ffa4c6eb7ef25e771 MD5 · raw file
- #!/usr/bin/python
- # -*- 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
- 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()