中国大学MOOC嵩天老师的Python程序语言设计课程第5.2节
举一反三思考如何实现带动态刷新的七段数码管的绘制?
既然是动态刷新,说明七段数码管绘制中的主函数main需要重复不断打印输出;
1,那么我们需要用上while Ture循环语句来实现无限循环,且因为时间以每秒走,所以我们设置休眠时间为一秒;
def main():
while True:
t.setup(800, 350, 200, 200)
t.penup()
t.fd(-300)
t.pensize(5)
t.tracer(False) # 隐藏绘图,直接显示结果
drawDate(time.strftime("%H-%M=%S+", time.gmtime())) #将模板设置为"小时-分钟=秒+"
t.hideturtle()
time.sleep(1)
t.done()
绘画效果:
我们发现重复输出后绘图出现重叠
2,这时候我们需要用上turtle库中的全局控制命令reset()来清空窗口,重置turtle状态为起止状态。
def main():
while True:
t.reset() #清空窗口,重置turtle状态为起止状态
t.setup(800, 350, 200, 200)
t.penup()
t.fd(-300)
t.pensize(5)
t.tracer(False) # 隐藏绘图,直接显示结果
drawDate(time.strftime("%H-%M=%S+", time.gmtime())) #将模板设置为"小时-分钟=秒+"
t.hideturtle()
time.sleep(1)
t.done()
绘画效果:
3,细心的我发现当前获得的时间并非北京时间,这里查找了一下问题发现gmtime()函数获取的时间是格林尼治时间(英国的标准时间),与北京时间相差6个小时。来源:python中ctime和gmtime获取的时间不一样
这时为了解决这个问题,我们引入一个datetime库,使用datetime.datetime.now()来获取当前时间
def main():
while True:
t.reset() 清空窗口,重置turtle状态为起止状态
t.setup(800, 350, 200, 200)
t.penup()
t.fd(-300)
t.pensize(5)
t.tracer(False) # 隐藏绘图,直接显示结果
t.hideturtle()
drawDate(datetime.datetime.now().strftime('%H-%M=%S+')) #将模板设置为"小时-分钟=秒+"
time.sleep(1)
t.done()
绘画效果:
4,完整代码
# 开发时间 2021/2/21 23:00
import turtle as t
import time
import datetime
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)
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) # 为绘制后续数字确定位置
def drawDate(date):
t.pencolor("red")
for i in date:
if i == '-':
t.write('时', font=("Arial", 18, "normal"))
t.pencolor("green")
t.fd(40)
elif i == '=':
t.write('分', font=("Arial", 18, "normal"))
t.pencolor("blue")
t.fd(40)
elif i == '+':
t.write('秒', font=("Arial", 18, "normal"))
else:
drawDight(eval(i))
def main():
while True:
t.reset() 清空窗口,重置turtle状态为起止状态
t.setup(800, 350, 200, 200)
t.penup()
t.fd(-300)
t.pensize(5)
t.tracer(False) # 隐藏绘图,直接显示结果
t.hideturtle()
drawDate(datetime.datetime.now().strftime('%H-%M=%S+')) #将模板设置为"小时-分钟=秒+"
time.sleep(1)
t.done()
main()