trutle画图之可显示任意数字的晶体数码管设计

2022-05-05 19:43:59 浏览数 (1)

目录

晶体数码管绘制顺序

晶体数码管绘制函数

获取并绘制当前时间


Hello!你好哇,我是灰小猿!一个超会写bug的程序猿!

今天和大家分享一个关于使用Python绘制晶体数码管管的项目,目的是能够使用该程序会,任意的绘制出数字,先来看一个绘制数字0~9的效果:

晶体数码管绘制顺序

晶体数码管的绘制,是采用trutle库来进行绘制,数码管的绘制顺序如下:

从图中可以看出,绘制起点在数码管的中部左侧,在这七段数码管中,无论每一段是否被绘制出来,画笔都会按照上方的顺序绘制完这七段。

晶体数码管绘制函数

代码语言:javascript复制
from turtle import *
import datetime

#数码管间隔函数
def drawGap():
    penup()
    fd(5)

#单段数码管绘制
def drawLine(draw):
    drawGap()

    if draw :
        pendown()
    else:
        penup()
    fd(40)
    drawGap()
    right(90)

#输入数据绘制
def drawDigit(n):
    #第一段
    if n in [2,3,4,5,6,8,9]:
        drawLine(True)
    else:
        drawLine(False)
        
    #第二段
    if n in [0,1,3,4,5,6,7,8,9]:
        drawLine(True)
    else:
        drawLine(False)
        
    #第三段
    if n in [0,2,3,5,6,8,9]:
        drawLine(True)
    else:
        drawLine(False)

    #第四段
    if n in [0,2,6,8]:
        drawLine(True)
    else:
        drawLine(False)

    left(90)

    #第五段
    if n in [0,4,5,6,8,9]:
        drawLine(True)
    else:
        drawLine(False)

    #第六段
    if n in [0,2,3,5,6,7,8,9]:
        drawLine(True)
    else:
        drawLine(False)

    #第七段
    if n in [0,1,2,3,4,7,8,9]:
        drawLine(True)
    else:
        drawLine(False)

    left(180)
    penup()
    fd(20)

if __name__ == "__main__":
    #绘制数字0~9
    for i in range(0,10):
        drawDigit(i)

获取并绘制当前时间

接下来是通过上面的绘制数码管的函数,获取当前时间并显示:

代码语言:javascript复制
from turtle import *
import datetime
import time

#数码管间隔函数
def drawGap():
    penup()
    fd(5)

#单段数码管绘制
def drawLine(draw):
    drawGap()

    if draw :
        pendown()
    else:
        penup()
    fd(40)
    drawGap()
    right(90)

#输入数据绘制
def drawDigit(n):
    #第一段
    if n in [2,3,4,5,6,8,9]:
        drawLine(True)
    else:
        drawLine(False)
        
    #第二段
    if n in [0,1,3,4,5,6,7,8,9]:
        drawLine(True)
    else:
        drawLine(False)
        
    #第三段
    if n in [0,2,3,5,6,8,9]:
        drawLine(True)
    else:
        drawLine(False)

    #第四段
    if n in [0,2,6,8]:
        drawLine(True)
    else:
        drawLine(False)

    left(90)

    #第五段
    if n in [0,4,5,6,8,9]:
        drawLine(True)
    else:
        drawLine(False)

    #第六段
    if n in [0,2,3,5,6,7,8,9]:
        drawLine(True)
    else:
        drawLine(False)

    #第七段
    if n in [0,1,2,3,4,7,8,9]:
        drawLine(True)
    else:
        drawLine(False)

    left(180)
    penup()
    fd(20)


#根据输入内容进行绘制
def drawDate(date):
    for i in date:
        if i=="-":
            write("年",font=("楷体",20,"normal"))
            fd(40)
        elif i=="=":
            write("月",font=("楷体",20,"normal"))
            fd(40)
        elif i=="_":
            write("日",font=("楷体",20,"normal"))
            fd(40)
        elif i==" ":
            write("时",font=("楷体",20,"normal"))
            fd(40)
        elif i=="#":
            write("分",font=("楷体",20,"normal"))
            fd(40)
        elif i=="*":
            write("秒",font=("楷体",20,"normal"))
            fd(40)
        else:
            drawDigit(eval(i))


if __name__ == "__main__":
    setup(800,400,100,100)
    pensize(5)
    pencolor("red")
    penup()
    fd(-550)
    while(True):
        drawDate(datetime.datetime.now().strftime("%Y-%m=%d_%H %M#%S*"))

效果如下:

觉得有用记得点赞关注哟!

大灰狼陪你一起进步!

0 人点赞