利用Turtle进行时钟绘制,并能够进行实时的计时:
# turtleClock.py
from turtle import *
from datetime import *
def Skip(step):
penup()
fd(step)
pendown()
def mkHand(name,length):
#注册Turtle形状,建立表针Turtle
reset()#擦除上一次的绘制,重新绘制表针的位置
Skip(-length * 0.1)
begin_poly() #开始绘制
fd(length * 1.1)
end_poly()
handForm = get_poly()
register_shape(name,handForm)
def Init():
global secHand,minHand,hurHand,printer
mode('logo')#重置Turtle指向北
mkHand('secHand',125)
mkHand('minHand',120)
mkHand('hurHand',90)
secHand = Turtle()
secHand.shape('secHand')
minHand = Turtle()
minHand.shape('minHand')
hurHand = Turtle()
hurHand.shape('hurHand')
for hand in secHand,minHand,hurHand:
hand.shapesize(1,1,3)
hand.speed(0)
#建立输出文字
printer = Turtle()
printer.hideturtle()
printer.penup()
def SetupClock(radius):
reset()
pensize(7)
for i in range(60):
Skip(radius)
if i % 5 ==0:
forward(20)
Skip(-radius - 20)
else:
dot(5)
Skip(-radius)
right(6)
def Week(t):
week = ["星期一", "星期二", "星期三",
"星期四", "星期五", "星期六", "星期日"]
return week[t.weekday()]
def Date(t):
y = t.year
m = t.month
d = t.day
return '%s年%d月%d日' %(y,m,d)
def Time(t):
s = t.second
m = t.minute
h = t.hour
return '%s:%s:%s'%(h,m,s)
def Tick():
#绘制表针的动态显示
t = datetime.today()
second = t.second + t.microsecond*0.000001
minute = t.minute + second/60.0
hour = t.hour + minute/60.0
secHand.setheading(6*second)
minHand.setheading(6*minute)
hurHand.setheading(6*hour)
tracer(False)
printer.forward(-65)
printer.write(Week(t),align ='center',font = ('Courier',14,'bold'))
printer.back(40)
printer.write(Date(t),align = 'center',font = ('Courier',14,'bold'))
# printer.back(45)
# printer.write(Time(t),align = 'center',font = ('Courier',14,'bold'))
printer.home()
tracer(True)
ontimer(Tick,100)#100ms后继续调用tick
def main():
tracer(False)
Init()
SetupClock(160)
tracer(True)
Tick()
mainloop()
if __name__ == '__main__':
main()
运行结果图: