python 程序设计现代方法 4 钟表专辑
程序员文章站
2022-07-08 15:51:27
from turtle import *# 引入绘图模块from datetime import *# 引入时间模块speed(10)# 设置笔速def jump(x): # jump函数确定时间标距表心的距离 penup() # 抬笔,防止下面跳跃的时候有笔迹 forward(x) # 跳跃给定的距离x pendown() #...
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