数码管"/>
用turtle绘画电子数码管
今天我来用用turtle绘画电子数码管,在进入主题之前我们先理一下绘制这个电子数码管基本思路
基本思路
- 绘制单个数字对应的数码管
- 获得一串数字,绘制对应的数码管
- 获得当前系统时间,绘制对应的数码管
绘制单段间隔
def drawGap(): #定义drawGappenup()fd(5) #提笔,移动
绘制单段数码管(单个数字),代码如下
def drawLine(draw): #定义drawLine函数if draw:pendown()else:penup()fd(40)drawGap()right(90)
- 七段数码管由7个基本线条组成
- 七段数码管可以有固定顺序
- 不同数字显示不同的线条
根据数字绘制七段数码管(多个数字),代码如下
def drawDigit(digit): #定义drawDigitpencolor(random(), random(), random())drawLine(True) if digit in [2, 3, 4, 5, 6, 8, 9] else drawLine(False)#绘制一号线pencolor(random(), random(), random())#设置随机颜色drawLine(True) if digit in [0, 1, 3, 4, 5, 6, 7, 8, 9] else drawLine(False)#绘制二号线pencolor(random(), random(), random())#设置随机颜色drawLine(True) if digit in [0, 2, 3, 5, 6, 8, 9] else drawLine(False)#绘制三号线pencolor(random(), random(), random())#设置随机颜色drawLine(True) if digit in [0, 2, 6, 8] else drawLine(False)#绘制四号线pencolor(random(), random(), random())#设置随机颜色left(90)#在四号线和五号线之间需要直线,所以需要和四号线平行drawLine(True) if digit in [0, 4, 5, 6, 8, 9] else drawLine(False)#绘制五号线pencolor(random(), random(), random())#设置随机颜色drawLine(True) if digit in [0, 2, 3, 5, 6, 7, 8, 9] else drawLine(False)#绘制六号线pencolor(random(), random(), random())#设置随机颜色drawLine(True) if digit in [0, 1, 2, 3, 4, 7, 8, 9] else drawLine(False)#绘制七号线pencolor(random(), random(), random())#设置随机颜色left(180)penup()#为绘制后续数字确定位置fd(20)#为前后两数字之间分离的距离
获取要输出的数字(系统日期)
def drawDate(date): #date为日期,格式为%Y-%m=%d+%H@%M#%S&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"))else:drawDigit(eval(i))#调用drawDigit()函数
编写主函数(函数调用,画布画笔的设置)
def main():setup(1200, 400, 200, 200)#设置画布坐标和大小penup()fd(-600)pensize(5)#设置画笔的粗细drawDate(time.strftime('%Y-%m=%d+%H@%M#%S&', time.localtime()))hideturtle()done()
调用主函数
main()
完整代码如下
from turtle import *
from random import *
import timedef drawGap():penup()fd(5)def drawLine(draw):if draw:pendown()else:penup()fd(40)drawGap()right(90)def drawDigit(digit):pencolor(random(), random(), random())drawLine(True) if digit in [2, 3, 4, 5, 6, 8, 9] else drawLine(False)pencolor(random(), random(), random())drawLine(True) if digit in [0, 1, 3, 4, 5, 6, 7, 8, 9] else drawLine(False)pencolor(random(), random(), random())drawLine(True) if digit in [0, 2, 3, 5, 6, 8, 9] else drawLine(False)pencolor(random(), random(), random())drawLine(True) if digit in [0, 2, 6, 8] else drawLine(False)pencolor(random(), random(), random())left(90)drawLine(True) if digit in [0, 4, 5, 6, 8, 9] else drawLine(False)pencolor(random(), random(), random())drawLine(True) if digit in [0, 2, 3, 5, 6, 7, 8, 9] else drawLine(False)pencolor(random(), random(), random())drawLine(True) if digit in [0, 1, 2, 3, 4, 7, 8, 9] else drawLine(False)pencolor(random(), random(), random())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"))else:drawDigit(eval(i))def main():setup(1200, 400, 200, 200)penup()fd(-600)pensize(5)drawDate(time.strftime('%Y-%m=%d+%H@%M#%S&', time.localtime()))hideturtle()done()main()
更多推荐
用turtle绘画电子数码管
发布评论