#Python制作一个时钟
import turtle
from datetime import *
def skip(step):
#移动指定步数
turtle.penup()
turtle.forward(step)
turtle.pendown()
def mk_hand(name,length):
#绘制指针形状
turtle.reset()#清空窗口,重置turtle状态为起始状态
skip(-length*0.1)
turtle.begin_poly()#开始记录多边形的顶点,当前位置是多边形的第一个顶点
turtle.forward(length*1.1)
turtle.end_poly()#停止记录多边形的顶点,当前乌龟位置是多边形的最后一个顶点,将与第一个顶点相连
handForm=turtle.get_poly()#返回最后记录的多边形
turtle.register_shape(name,handForm)#注册Turtle形状命令
def setup_clock(radius):
#绘制表盘
turtle.reset()
turtle.pensize(7)
for i in range(60):
skip(radius)
if i%5==0:
turtle.pencolor("black")
turtle.forward(20)
if i==0:
turtle.write(int(12),align="center",font=("Courier",14,"bold"))
elif i==30:
skip(25)
turtle.write(int(i/5),align="center",font=("Courier",14,"bold"))
skip(-25)
elif (i==25 or i==35):
skip(20)
turtle.write(int(i/5),align="center",font=("Courier",14,"bold"))
skip(-20)
else:
turtle.write(int(i/5),align="center",font=("Courier",14,"bold"))
skip(-radius-20)
else:
turtle.pencolor("red")
turtle.dot(5)
skip(-radius)
turtle.right(6)#顺时钟移动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 tick():
#指针更新
t=datetime.today()
sec_hand.setheading(6*t.second)
min_hand.setheading(6*t.minute)
hur_hand.setheading(30*t.hour)
turtle.tracer(False)
printer.forward(65)
printer.write(Week(t), align="center",font=("Courier", 14, "bold"))
printer.back(130)
printer.write(Date(t),align="center",font=("Courier", 14, "bold"))
printer.home()
turtle.tracer(True)
turtle.ontimer(tick,1000)
turtle.title("时钟")
turtle.tracer(False)
turtle.mode("logo")
#绘制指针
mk_hand("secHand",135)
mk_hand("minHand",125)
mk_hand("hurHand",90)
sec_hand=turtle.Turtle()
sec_hand.shape("secHand")
sec_hand.pencolor("red")
min_hand=turtle.Turtle()
min_hand.shape("minHand")
min_hand.pencolor("blue")
hur_hand=turtle.Turtle()
hur_hand.shape("hurHand")
for hand in sec_hand,min_hand,hur_hand:
hand.shapesize(1,1,3)
hand.speed(0)
printer=turtle.Turtle()
printer.hideturtle()
printer.penup()
#绘制表盘
setup_clock(160)
turtle.tracer(True)
tick()
turtle.done()