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

举报
灰小猿 发表于 2021/05/26 13:43:39 2021/05/26
3.7k+ 0 0
【摘要】 目录 晶体数码管绘制顺序 晶体数码管绘制函数 获取并绘制当前时间 Hello!你好哇,我是灰小猿!一个超会写bug的程序猿! 今天和大家分享一个关于使用Python绘制晶体数码管管的项目,目的是能够使用该程序会,任意的绘制出数字,先来看一个绘制数字0~9的效果: 晶体数码管绘制顺序 晶体数码管的绘制,是采用trutle库来进行绘制,数码管的绘制顺序如下: ...

目录

晶体数码管绘制顺序

晶体数码管绘制函数

获取并绘制当前时间


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

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

晶体数码管绘制顺序

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

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

晶体数码管绘制函数


      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)
  
 

获取并绘制当前时间

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


      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*"))
  
 

效果如下:

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

大灰狼陪你一起进步!

文章来源: blog.csdn.net,作者:灰小猿,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/weixin_44985880/article/details/108703654

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

作者其他文章

评论(0

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。