要想绘制可以显示时间的数码管肯定要用到turtle和time两个标准库。
import turtle as t import time
码管由七段构成,要想画出一个数码管,就要先从它的一段画起,然后按照顺序画完七段,如图所示:
首先需要定义一个画一段的函数,我们需要一点点的距离,所以还需要一个产生距离的函数。
def drawgap(): t.penup() t.fd(5) def drawline(draw): drawgap() t.pendown() if draw else t.penup() t.fd(40) drawgap() t.right(90)
义完画一段的函数,就需要画整个数字了,0-9的数码管显示会有的部分不显示,有的部分显示,所以我们需要定义一个判断函数,来判断一个数字哪几段需要画出来。
def drawdight(dight): drawline(True) if dight in [2,3,4,5,6,8,9] else drawline(False) drawline(True) if dight in [0,1,3,4,5,6,7,8,9] else drawline(False) drawline(True) if dight in [0,2,3,5,6,8,9] else drawline(False) drawline(True) if dight in [0,2,6,8] else drawline(False) t.left(90) drawline(True) if dight in [0,4,5,6,8,9] else drawline(False) drawline(True) if dight in [0,2,3,5,6,7,8,9] else drawline(False) drawline(True) if dight in [0,1,2,3,4,7,8,9] else drawline(False) t.left(180) t.penup() t.fd(20)
一个数字画完了,然而日期和时间的显示需要很多数字组合显示,所以需要一个画出日期的函数(内部的判断和循环需要遵照time库的时间显示方式)
def drawdate(date): for i in date: if i == '-': t.write('年',font=('宋体',18,'normal')) t.pencolor('green') t.fd(40) elif i == '+': t.write('月',font=('宋体',18,'normal')) t.pencolor('purple') t.fd(40) elif i == '=': t.write('日',font=('宋体',18,'normal')) t.pencolor('blue') t.fd(40) elif i == '*': t.write('时',font=('宋体',18,'normal')) t.pencolor('gold') t.fd(40) elif i == '#': t.write('分',font=('宋体',18,'normal')) t.pencolor('brown') t.fd(40) elif i == '&': t.write('秒',font=('宋体',18,'normal')) t.pencolor('coral') t.fd(40) else: drawdight(eval(i))
最后获取时间,设置窗体,调用函数
def main(): t.setup(1600,400) t.pencolor('red') t.width(10) t.speed(5) t.penup() t.fd(-600) drawdate(time.strftime('%Y-%m+%d=%H*%M#%S&',time.localtime())) t.done() main()
效果如下: