【用python的标准库画出显示实时时间的数码管】

简介: 【用python的标准库画出显示实时时间的数码管】

要想绘制可以显示时间的数码管肯定要用到turtle和time两个标准库。

import turtle as t
import time

码管由七段构成,要想画出一个数码管,就要先从它的一段画起,然后按照顺序画完七段,如图所示:

首先需要定义一个画一段的函数,我们需要一点点的距离,所以还需要一个产生距离的函数。

def drawgap():
    t.penup()
    t.fd(5)
def drawline(draw):
    drawgap()
    t.pendown() if draw else t.penup()
    t.fd(40)
    drawgap()
    t.right(90)

义完画一段的函数,就需要画整个数字了,0-9的数码管显示会有的部分不显示,有的部分显示,所以我们需要定义一个判断函数,来判断一个数字哪几段需要画出来。

def drawdight(dight):
    drawline(True) if dight in [2,3,4,5,6,8,9] else drawline(False)
    drawline(True) if dight in [0,1,3,4,5,6,7,8,9] else drawline(False)
    drawline(True) if dight in [0,2,3,5,6,8,9] else drawline(False)
    drawline(True) if dight in [0,2,6,8] else drawline(False)
    t.left(90)
    drawline(True) if dight in [0,4,5,6,8,9] else drawline(False)
    drawline(True) if dight in [0,2,3,5,6,7,8,9] else drawline(False)
    drawline(True) if dight in [0,1,2,3,4,7,8,9] else drawline(False)
    t.left(180)
    t.penup()
    t.fd(20)

一个数字画完了,然而日期和时间的显示需要很多数字组合显示,所以需要一个画出日期的函数(内部的判断和循环需要遵照time库的时间显示方式)

def drawdate(date):
    for i in date:
        if i == '-':
            t.write('年',font=('宋体',18,'normal'))
            t.pencolor('green')
            t.fd(40)
        elif i == '+':
            t.write('月',font=('宋体',18,'normal'))
            t.pencolor('purple')
            t.fd(40)
        elif i == '=':
            t.write('日',font=('宋体',18,'normal'))
            t.pencolor('blue')
            t.fd(40)
        elif i == '*':
            t.write('时',font=('宋体',18,'normal'))
            t.pencolor('gold')
            t.fd(40)
        elif i == '#':
            t.write('分',font=('宋体',18,'normal'))
            t.pencolor('brown')
            t.fd(40)
        elif i == '&':
            t.write('秒',font=('宋体',18,'normal'))
            t.pencolor('coral')
            t.fd(40)
        else:
            drawdight(eval(i))

最后获取时间,设置窗体,调用函数

def main():
    t.setup(1600,400)
    t.pencolor('red')
    t.width(10)
    t.speed(5)
    t.penup()
    t.fd(-600)
    drawdate(time.strftime('%Y-%m+%d=%H*%M#%S&',time.localtime()))
    t.done()
main()

效果如下:

相关文章
|
6天前
|
Python
手撕Python!模块、包、库,傻傻分不清?一分钟带你弄明白!
手撕Python!模块、包、库,傻傻分不清?一分钟带你弄明白!
19 1
|
6天前
|
安全 程序员 API
几个被淘汰的Python库,请不要再用!
几个被淘汰的Python库,请不要再用!
16 0
|
20天前
|
数据采集 存储 JSON
从零到一构建网络爬虫帝国:HTTP协议+Python requests库深度解析
【7月更文挑战第31天】在网络数据的海洋中,使用Python的`requests`库构建网络爬虫就像探索未知的航船。HTTP协议指导爬虫与服务器交流,收集信息。HTTP请求包括请求行、头和体,响应则含状态行、头和体。`requests`简化了发送各种HTTP请求的过程。
47 4
|
20天前
|
JSON API 开发者
Python网络编程新纪元:urllib与requests库,让你的HTTP请求无所不能
【7月更文挑战第31天】互联网的发展使网络编程成为软件开发的关键部分. Python以简洁、功能强大著称, 在此领域尤显突出. `urllib`作为标准库, 自Python初期便支持URL处理, 如读取URL (`urllib.request`) 和解析 (`urllib.parse`). 尽管API底层, 但奠定了网络编程基础.
34 4
|
2天前
|
存储 JSON API
Pydantic:目前最流行的Python数据验证库
在处理来自系统外部的数据,如API、终端用户输入或其他来源时,我们必须牢记开发中的一条基本原则:“永远不要相信用户的输入”。 因此,我们必须对这些数据进行严格的检查和验证,确保它们被适当地格式化和标准化。这样做的目的是为了确保这些数据符合我们的程序所需的输入规范,从而保障项目能够正确且高效地运行。
|
3天前
|
存储 缓存 索引
Python中的NumPy库详解
Python中的NumPy库详解
|
6天前
|
XML 自然语言处理 关系型数据库
CasADi - 最优控制开源 Python/MATLAB 库4
CasADi - 最优控制开源 Python/MATLAB 库
17 4
|
6天前
|
Linux API C++
CasADi - 最优控制开源 Python/MATLAB 库3
CasADi - 最优控制开源 Python/MATLAB 库
20 4
|
6天前
|
算法 数据可视化 机器人
Pinocchio - 开源多刚体动力学 C++、Python库
Pinocchio - 开源多刚体动力学 C++、Python库
9 2
|
5天前
|
存储 网络协议 Python
Python如何用PyModbus库进行Modbus TCP通信
使用python解决工业通信问题是一个非常好的选择,python具有丰富的生态,可以轻松解决工业通信的各种问题。 本篇主要介绍使用pymodbus库进行modbus tcp仿真,实现pc端读取plc或工业设备modbus变量。