python绘图代码的解读
对以下python绘制钟表没有解读的代码逐行进行解读
```python
import turtle as tt
from datetime import *
# 抬起画笔,跳到一个地方
def Skip(step):
tt.penup()#抬起画笔
tt.forward(step)#画笔前进一段距离
tt.pendown()#画笔落下
#创建表针函数
def Zheng(name, length):
tt.reset()# 注册Turtle形状,建立表针Turtle
Skip(-length * 0.1)#表针一端,过表盘中心一小段,开始绘制
tt.begin_poly()# 开始记录多边形的顶点。当前的乌龟位置是多边形的第一个顶点。
tt.forward(length * 1.1)# 设置表针长度,绘制表针
tt.end_poly() # 停止记录多边形的顶点。当前的乌龟位置是多边形的最后一个顶点。将与第一个顶点相连
handForm = tt.get_poly()# 返回最后记录的多边形。
tt.register_shape(name, handForm)
def Init():
global miao, fen, shi, printer
tt.mode("logo")# logo:向上(北) 顺时针
# 建立三个表针Turtle并初始化
Zheng("miao", 135)#设置秒针的长度为135
Zheng("fen", 120)#分针的长度为120
Zheng("shi", 80)#时针的长度为80
miao = tt.Turtle()
miao.shape("miao")
fen = tt.Turtle()
fen.shape("fen")
shi = tt.Turtle()
shi.shape("shi")
for hand in miao, fen, shi:
hand.shapesize(1, 1, 3)
hand.speed(0)
# 建立输出文字Turtle
printer = tt.Turtle()
# 隐藏画笔
printer.hideturtle()
printer.penup()
def SetupClock(r):
# 建立表的外框
tt.reset()
tt.pensize(7)#画笔宽度
for i in range(60):#循环60次
Skip(r)
if i % 5 == 0:
tt.forward(20)
Skip(-r - 20)
Skip(r + 20)
if i == 0:
tt.write(int(12), align="center", font=("Courier", 15, "bold"))
elif i == 30:
Skip(25)
tt.write(int(i/5), align="center", font=("Courier", 15, "bold"))
Skip(-25)
elif (i == 25 or i == 35):
Skip(20)
tt.write(int(i/5), align="center", font=("Courier", 15, "bold"))
Skip(-20)
else:
tt.write(int(i/5), align="center", font=("Courier", 15, "bold"))
Skip(-r - 20)
else:
tt.dot(5)
Skip(-r)
tt.right(6)
#创建星期函数
def Week(t):
week = ["Monday", "Tuesday", "Wed","Thurs", "Fri", "Sat", "Sun"]#创建星期列表
return week[t.weekday()]# t.weekday() 周一为0,周二为1...可作为列表的index
#创建日期函数
def Date(t):
y = t.year#获得年
m = t.month#获得月
d = t.day#获得日
return "{} 年 {} 月 {} 日".format(y, m, d)#格式化字符串:-年-月-日
#显示时间函数
def time(t):
m = t.minute#获得分
h = t.hour#获得时
return "{}:{}".format(h, m)#格式化字符串
def Tick():
# 绘制表针的动态显示
t = datetime.today()
second = t.second + t.microsecond * 0.000001
minute = t.minute + second / 60.0
hour = t.hour + minute / 60.0
miao.setheading(6 * second)
fen.setheading(6 * minute)
shi.setheading(30 * hour)
tt.tracer(False)
printer.forward(65)
printer.write(Week(t), align="center",
font=("Courier", 15, "bold"))
printer.back(130)
printer.write(Date(t), align="center",
font=("Courier", 15, "bold"))
printer.home()
tt.tracer(True)
# 100ms后继续调用tick
tt.ontimer(Tick, 100)
def main():
# 打开/关闭龟动画,并为更新图纸设置延迟。
tt.tracer(False)
Init()
SetupClock(160)
tt.tracer(True)
Tick()
tt.mainloop()#显示时钟
#主窗口运行
if __name__ == "__main__":
main()
```