from turtle import *			# 引入绘图模块
from datetime import *			# 引入时间模块
speed(10)						# 设置笔速
def jump(x):               		# jump函数确定时间标距表心的距离
penup()                 	# 抬笔,防止下面跳跃的时候有笔迹
forward(x)              	# 跳跃给定的距离x
pendown()               	# 落笔,准备画
penup()                 	# 抬笔,防止下一步出现笔迹
def ok(y):                  	# 设置函数ok准备画时间戳
goto(0,0)
dot(5)						# 在起始表心处画点
pensize(5)              	# 设置笔宽
for i in range(1,60):		# 进行60刻度的循环,但是range是开区间
right(6)                # 旋转6度,寻找下一个刻度
if i%5==0:              # if语句判断整点时候的时间戳
jump(y-20)          # 跳跃
pendown()           # 落笔
forward(40)         # 画出时间戳
penup()				# 抬笔
forward(-y-20)		# 跳跃回起始点
else:					# 如果不是整点刻度或者画短线
# jump(y) # 跳跃
# dot(5) # 画点
# jump(-y) # 跳回起始点
jump(y)				# 跳跃
pensize(2)			# 谁知笔宽,使非整点刻度明显区分整点刻度
pendown()			# 落笔,准备画
forward(10)			# 画出非整点刻度
pensize(5)			# 调回笔道粗细
penup()				# 抬笔,绘画结束
jump(-y-10)			# 调回起始点
# 后面这五行都是为了在60处画出整点标,因为在range函数中,不包括60,开区间
right(6)                    # 手动旋转6度
jump(y - 20)  				# 跳跃
pendown()  					# 落笔
forward(40) 				# 画出时间戳
penup()						# 抬笔
forward(-y - 20)			# 返回原点
def zhizhen(name,lang):     	# 定义表针,设置函数zhizhen,函数名随便起,好区分就行
goto(0,0)
reset()						# 返回起始位置
jump(-0.1*lang)             # 确定指针的中心点
begin_poly()				# 绘制指针开始
forward(1.1*lang)           # 画出指针的长度
end_poly()					# 绘制指针结束
thename=get_poly()          # 注册此指针的名字
register_shape(name,thename)# 返回注册信息
def init():                     # 设置函数,初始化表针
# 表明需要初始化的内容名字
global miaozhen,fenzhen,shizhen,printer
mode("logo")                # 重置表针方向,朝上
miaozhen=Turtle()           # 使用绘图函数对表针进行定义
zhizhen("miaozhen",130)     # 用zhizhen函数绘出表针的样子
miaozhen.shape("miaozhen")  # 将秒针的图形赋给秒针的定义
fenzhen = Turtle()          # 以下分针时针等意于秒针
zhizhen("fenzhen", 100)
fenzhen.shape("fenzhen")
shizhen=Turtle()
zhizhen("shizhen",60)
shizhen.shape("shizhen")
# 临时调用cuxi定义表针的粗细区别
for cuxi in miaozhen,fenzhen,shizhen:
cuxi.shapesize(1,1,3)   # 粗细比分别是1.1.3
cuxi.speed(0)           # 将表针旋转速度设为0
printer=Turtle()            # 设计表盘中字的输出
printer.hideturtle()        # 设置默认高度
printer.penup()             # 抬笔
def week(t):
week=["星期一","星期二","星期三","星期四","星期五","星期六","星期天"]
return week[t.weekday()]    # 返回当前周
def day(t):                     # 设置函数day来返回当前时间的年月日
# 输出当前时间戳
return "%s %d %d " %(t.year,t.month,t.day)
def tick():
t=datetime.today()          # 将当前时间赋值给变量t
# 将当前秒赋给变量second,并且加上运行时间
second=t.second+t.microsecond*0.000001
minute=t.minute+t.second/60.0
hour=t.hour+t.minute/60.0
# 用当前秒来判定指针应该指向的位置
miaozhen.setheading(second*6)
fenzhen.setheading(minute*6)
shizhen.setheading(hour*30)
tracer(False)               # 关闭绘画追踪
printer.fd(70)              # 向前移动的距离
# 输出当前星期
printer.write(week(t),align="center",font=("courier",14,"bold"))
printer.back(50)            # 下移,准备输出当前年月日
# 输出当前年月日
printer.write(day(t),align="center",font=("courier",14,"bold"))
printer.home()              # 将位置和方向恢复到初始状态
tracer(True)                # 开启绘画追踪
ontimer(tick,100)           # 设置计时器,100ms之后继续进行调用tick函数
def main():                     # 使用函数main进行表的系统输出
# tracer(False) # 关闭绘画追踪,将这行注释掉可以详细查看代码运行
init()                      # 初始化表针并且画出表针
ok(200)                     # 绘画表盘
tracer(True)                # 开启绘画追踪
tick()                      # 写出星期,时间,按照时间改变指针指向
done()                      #
main()                          # 调用函数main
  任课老师:汪峰

本文地址:https://blog.csdn.net/white_or_abc/article/details/110914148