python用海龟画出7段数码管时钟

python用海龟画出7段数码管时钟,第1张

概述fromturtleimport*fromdatetimeimport*importtime'''主要的思想就是海龟作图,然后用一个循环去刷新一帧图像但是因为应用了比较复杂的数码管图像,每一帧刷新延迟会比较严重所以引入了多只乌龟来进行刷新,同时控制不同乌龟的刷新速度,来优化程序'''defskip(t:Turtle,s
from turtle import *from datetime import *import time'''主要的思想就是海龟作图,然后用一个循环去刷新一帧图像但是因为应用了比较复杂的数码管图像,每一帧刷新延迟会比较严重所以引入了多只乌龟来进行刷新,同时控制不同乌龟的刷新速度,来优化程序'''def skip(t:Turtle,step=5):    # 这里定义了一个新的turtle *** 作,跳跃,默认画出小间隔    # 确保之后小乌龟都是以pendown,然后白的靠跳    t.penup()    t.forward(step)    t.pendown()def digital_tuber(ignitor,t:Turtle):    # 画出一个数码管(6边形),但是不注册它,颜色由外部控制    # 小乌龟会在自己面朝的方向(正中)上画出一个数码管    temp = t.pensize()    t.pensize(2)    skip(t)    if ignitor:        # ignitor用于控制是否进行画图,不然就是空白管        t.pendown()        t.begin_fill()        t.begin_poly()        for i in range(2):            t.left(30)            t.forward(5)            t.right(30)            t.forward(32)            t.right(30)            t.forward(5)            t.right(150)        t.end_poly()        t.end_fill()        skip(t,40)    else:        skip(t,40)    skip(t)    t.pensize(temp)    # 还原def digital_maker(digit:int,t:Turtle):    # 画出数码管构成数字,然后在每次显示的时候对一个图像刷新    # 用一个函数来实现所有数字    t.left(90)    # 因为我们采取的是默认的模式,而不是logo    t.pendown()    # 画出管的实现    digital_tuber(True,t) if digit in [0, 1, 4, 5, 6, 8, 9] else digital_tuber(False,t)    t.right(90)    digital_tuber(True,t) if digit in [0, 2, 3, 5, 6, 7, 8, 9] else digital_tuber(False,t)    t.right(90)    digital_tuber(True,t) if digit in [0, 2, 3, 4, 7, 8, 9] else digital_tuber(False,t)    digital_tuber(True,t) if digit in [0, 3, 4, 5, 6, 7, 8, 9] else digital_tuber(False,t)    t.right(90)    digital_tuber(True,t) if digit in [0, 2, 3, 5, 6, 8, 9] else digital_tuber(False,t)    t.right(90)    digital_tuber(True,t) if digit in [0, 1, 2, 6, 8,] else digital_tuber(False,t)    t.right(90)    digital_tuber(True,t) if digit in [2, 3, 4, 5, 6, 8, 9] else digital_tuber(False,t)def show_number(n:int,t:Turtle):    # 用于画出数字    n = str(n)    for i in n:        digital_maker(int(i),t)        skip(t,20)def setframe():    # 画出程序的外框,和文字    t = Turtle()    t.hIDeturtle()    # 框架的画出不参与刷新,所以我们不需要外部turtle    t.begin_poly()    t.pensize(10)    t.penup()    t.goto(-450,250)    t.pendown()    t.goto(450,250)    t.goto(450,-250)    t.goto(-450,-250)    t.goto(-450,250)    t.penup()    t.end_poly()def drawDate(date,t:Turtle):    # 日期处理,将我们得到的时间,如何以格式化输出    t.penup()    t.pendown()    t.pencolor("red")    for i in date:        if i == "-":            t.write("年",Font=("Arial",18,"normal"))            t.pencolor("green")            skip(t,40)        elif i == "=":            t.write("月",Font=("Arial",18,"normal"))            t.pencolor("blue")            skip(t,40)        elif i == "+":            t.write("日",Font=("Arial",18,"normal"))        elif i == ":":            t.write(":", Font=("Arial", 36, "normal"))            skip(t,40)        else:            show_number(eval(i),t)            # 将这个字符串作为eval的参数,eval的返回值就是这个表达式的结果def show_date(t:Turtle):    t.reset()    t.penup()    t.goto(-325,100)    t.pendown()    # 用time模组得时间    drawDate(time.strftime("%Y-%m=%d+",time.gmtime()),t)def show_hours(t:Turtle):    # 画出下方的精确时间的函数    t.reset()    t.penup()    t.goto(-275, -100)    t.pendown()    temp = datetime.today()    h = temp.hour    m = temp.minute    s = temp.second    # 确保是两位数的格式    if h <= 9:        h = '0'+str(h)    else:        h = str(h)    if m <= 9:        m = '0' + str(m)    else:        m = str(m)    if s <= 9:        s = '0' + str(s)    else:        s = str(s)    drawDate(h+':'+m+':'+s,t)def defaultsetter():    # 用于初始化我们的画图体系    global dater, framer    # 在重置阶段就申明好乌龟,就不要多次申明了    # 实际上我想做的优化就是让许多只小乌龟去画,就可以减少刷心负担    tracer(0)    screensize(1000, 600)    framer = Turtle()    framer.hIDeturtle()    dater = Turtle()    dater.hIDeturtle()def resh_hour():    # 两个大函数的递归调用,为了区别刷新频率    dater.reset()    show_hours(dater)    ontimer(resh_hour,1000)    # 刷新基础时间,间隔为一秒def resh_date():    framer.reset()    show_date(framer)    ontimer(resh_date,10000)    # 刷新日期时间,间隔为10秒def main():    defaultsetter()    setframe()    resh_date()    resh_hour()    mainloop()if __name__ == '__main__':    main()

以上就是啦

总结

以上是内存溢出为你收集整理的python用海龟画出7段数码管时钟全部内容,希望文章能够帮你解决python用海龟画出7段数码管时钟所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1183718.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存