绘制数码管之前,我们先确定一个绘制的顺序,这里我们确定以向右为主要的方向调换,然后通过先绘制下半区,再绘制上半区的顺序来给每一段线段进行编号
现在先写出基础的线段函数,通过传入参数确定所画线段是否为实线
# 绘制单段线
def drawLine(isTrue:bool):
t.pendown() # 初始化画笔状态为放下
# 如果传入False,则抬起画笔
if not isTrue:
t.penup()
t.fd(40) # 沿当前方向前进40像素
t.right(90) # 右转90度
?然后可以写出一个通过传入的数字,来绘画出该数字的形状了
要点:根据数字显示,依次在特定的时间点内画出这个数字所需要的实线
# 也就是说,绘画的轨迹是固定的,只是需要显示对应的线条即可
def drawNumber(num:int):
# 画下半区
drawLine(num in [2, 3, 4, 5, 6, 8, 9]) # 第一段
drawLine(num in [0,1,3,4,5,6,7,8,9]) # 第二段
drawLine(num in [0,2,3,5,6,8,9]) # 第三段
drawLine(num in [0,2,6,8]) # 第四段
# 左转90度,画上区
t.left(90)
drawLine(num in [0,4,5,6,8,9]) # 第五段
drawLine(num in [0,2,3,5,6,7,8,9]) # 第六段
drawLine(num in [0,1,2,3,4,7,8,9]) # 第七段
可以测试以下
# 定基础位置
t.penup()
t.goto(-300,0)
drawNumber(5)
t.done()
?
接下来,可以写出接收一串纯数字的字符串然后画出数码管显示的函数
# 绘画数字字符串
def drawStrNumbers(yourStr:str):
# 遍历数字字符串
for n in yourStr:
num=int(n) # 将当前字符转化为int
drawNumber(num) # 绘图
# 调整方向,为下一次的数字做准备
t.left(180)
t.penup()
t.fd(40)
?测试
# 定基础位置
t.penup()
t.goto(-300,0)
drawStrNumbers('2021')
t.done()
?
?然后我们可以写出一个显示当前时间的函数了,直接调用即可
def drawNowDate():
s=datetime.datetime.now().strftime('%Y%m%d') # 返回显示年月日的字符串
drawStrNumbers(s)
|