PageRenderTime 16ms CodeModel.GetById 2ms app.highlight 11ms RepoModel.GetById 1ms app.codeStats 0ms

/Demo/turtle/tdemo_clock.py

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