python 使用turtle绘制数码管

本博客介绍了一种使用Python的turtle模块绘制数字并动态显示实时时间的方法。通过定义函数drawLine和drawDigit,可以绘制出类似数码管显示的数字。进一步,通过调用time模块获取当前时间,并将其转换为字符串形式,使用drawDate函数动态更新显示的时间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这段代码来自于嵩天老师python语言程序设计课程。

import turtle


def drawLine(draw):
    turtle.pendown() if draw else turtle.penup()
    turtle.fd(40)
    turtle.right(90)


def drawDigit(digit):
    drawLine(True) if digit in [2, 3, 4, 5, 6, 7, 8, 9] else drawLine(False)
    drawLine(True) if digit in [0, 1, 3, 4, 5, 6, 7, 8, 9] else drawLine(False)
    drawLine(True) if digit in [0, 2, 3, 5, 6, 8, 9] else drawLine(False)
    drawLine(True) if digit in [0, 2, 6, 8] else drawLine(False)
    turtle.left(90)
    drawLine(True) if digit in [0, 4, 5, 6, 8, 9] else drawLine(False)
    drawLine(True) if digit in [0, 2, 3, 5, 6, 7, 8, 9] else drawLine(False)
    drawLine(True) if digit in [0, 1, 2, 3, 4, 7, 8, 9] else drawLine(False)
    turtle.left(180)
    turtle.penup()
    turtle.fd(20)


def drawDate(date):
    for i in date:
        drawDigit(eval(i))


def main():
    turtle.setup(800, 350, 200, 200)
    turtle.penup()
    turtle.fd(-300)
    turtle.pensize(5)
    drawDate('20181010')
    turtle.hideturtle()
    turtle.done()


main()

 

效果如图

在此基础上定义了一个Gap函数来调整图像显示效果,使其更像数码管。并使其能够动态显示实时时间。

import turtle
import time
# import sys
# sys.setrecursionlimit(1000000)


def drawLine(draw):
    drawGap()
    turtle.pendown() if draw else turtle.penup()  # pendown和penup作用相反,pendown是把笔落在画布上
    turtle.fd(40)  # 前进40
    drawGap()
    turtle.right(90)  # 方向右转90度


def drawGap():
    turtle.penup()
    turtle.fd(5)


def drawDigit(digit):
    drawLine(True) if digit in [2, 3, 4, 5, 6, 8, 9] else drawLine(False)
    drawLine(True) if digit in [0, 1, 3, 4, 5, 6, 7, 8, 9] else drawLine(False)
    drawLine(True) if digit in [0, 2, 3, 5, 6, 8, 9] else drawLine(False)
    drawLine(True) if digit in [0, 2, 6, 8] else drawLine(False)
    turtle.left(90)
    drawLine(True) if digit in [0, 4, 5, 6, 8, 9] else drawLine(False)
    drawLine(True) if digit in [0, 2, 3, 5, 6, 7, 8, 9] else drawLine(False)
    drawLine(True) if digit in [0, 1, 2, 3, 4, 7, 8, 9] else drawLine(False)
    turtle.left(180)
    turtle.penup()
    turtle.fd(20)


def drawDate():
    turtle.tracer(False)#隐藏绘制过程
    date = time.strftime('%H-%M=%S+', time.localtime())
    turtle.pencolor("red")
    for i in date:
        if i == '-':
            turtle.write('时', font=("Arial", 18, "normal"))
            turtle.pencolor('green')
            turtle.fd(40)
        elif i == '=':
            turtle.write('分', font=("Arial", 18, "normal"))
            turtle.pencolor('blue')
            turtle.fd(40)
        elif i == '+':
            turtle.write('秒', font=("Arial", 18, "normal"))
        else:
            drawDigit(eval(i))
    turtle.reset()
    time.sleep(1)
    main()

def main():
    turtle.tracer(False)
    turtle.setup(800, 350, 200, 200)  # 初始画笔坐标和画布尺寸,另外初始画笔方向向右
    turtle.penup()  # 画笔抬起(也就是不画)
    turtle.fd(-300)  # 相对初始坐标退后300
    turtle.hideturtle()#隐藏Turtle
    turtle.pensize(5)  # 画笔大小:5
    turtle.tracer(True)
    drawDate()  # 调用drawDate函数



main()

 效果如图:

好的,以下是用Pythonturtle库画数码管的代: ```python import turtle # 画数码管 def draw_digit(digit, size): # 画横线 if digit in [2, 3, 4, 5, 6, 8, 9]: turtle.penup() turtle.goto(0, 0) turtle.pendown() turtle.forward(size) # 画上半横线 if digit in [0, 2, 3, 5, 6, 7, 8, 9]: turtle.penup() turtle.goto(0, size) turtle.pendown() turtle.right(90) turtle.forward(size) # 画下半横线 if digit in [0, 2, 3, 5, 6, 8, 9]: turtle.penup() turtle.goto(0, 0) turtle.pendown() turtle.right(90) turtle.forward(size) # 画左上竖线 if digit in [0, 4, 5, 6, 8, 9]: turtle.penup() turtle.goto(0, size) turtle.pendown() turtle.left(90) turtle.forward(size) # 画右上竖线 if digit in [0, 1, 2, 3, 4, 7, 8, 9]: turtle.penup() turtle.goto(size, size) turtle.pendown() turtle.right(90) turtle.forward(size) # 画左下竖线 if digit in [0, 2, 6, 8]: turtle.penup() turtle.goto(0, 0) turtle.pendown() turtle.left(90) turtle.forward(size) # 画右下竖线 if digit in [0, 1, 3, 4, 5, 6, 7, 8, 9]: turtle.penup() turtle.goto(size, 0) turtle.pendown() turtle.right(90) turtle.forward(size) # 测试 turtle.speed(0) # 设置画笔速度 turtle.pensize(5) # 设置画笔粗细 turtle.penup() turtle.goto(-250, 0) # 设置起始位置 turtle.pendown() draw_digit(0, 50) # 画字 0 turtle.penup() turtle.goto(-170, 0) turtle.pendown() draw_digit(1, 50) # 画字 1 turtle.penup() turtle.goto(-90, 0) turtle.pendown() draw_digit(2, 50) # 画字 2 turtle.penup() turtle.goto(10, 0) turtle.pendown() draw_digit(3, 50) # 画字 3 turtle.penup() turtle.goto(90, 0) turtle.pendown() draw_digit(4, 50) # 画字 4 turtle.penup() turtle.goto(170, 0) turtle.pendown() draw_digit(5, 50) # 画字 5 turtle.penup() turtle.goto(250, 0) turtle.pendown() draw_digit(6, 50) # 画字 6 turtle.done() # 完成绘画 ``` 运行代后,会得到一个绘制字 0-6 的数码管。你可以根据需要修改代中的字和大小参绘制不同的数码管
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值