Python结合Turtle库实现7段数码管实时时钟及打包教程

Chloe
Chloe
发布时间:2026-10-13 | 5人浏览过
原创

本文介绍如何使用Python的Turtle库绘制7段数码管风格的实时时钟,并通过threading实现定时刷新。文章详细讲解了数码管绘制逻辑、时间获取方法,以及利用PyInstaller将Python脚本打包为Windows可执行文件的完整步骤,包括环境配置与命令使用。

近期Python因其语法简洁且功能强大而备受青睐。借助丰富的第三方库,开发者可以无需重复造轮子,快速将创意转化为代码。正如业界前辈所言:“人生苦短,我选Python”,这种高效能使得通过配置Sublime Text等编辑器并参考教程快速上手小程序开发成为可能。

计算机技术的发展历程体现了从硬件到软件、从单一功能到综合智能的演进,这一过程总结得相当精辟。

在确保Python环境安装完毕的基础上,首先需要引入程序运行所需的库文件。

import threading
import turtle
import time

通过引入time模块并调用localtime()方法,可以获取服务器当前的系统时间。随后,利用turtle图形库绘制出7段数码管风格的时钟界面。

now = time.localtime() # 返回服务器时间
 
print(now)
print(time.strftime("%Y-%m-%d %H:%M:%S", now))
 
# 转成字符串
# %y 两位数的年份表示(00-99)
# %Y 四位数的年份表示(000-9999)
# %m 月份(01-12)
# %d 月内中的一天(0-31)
# %H 24小时制小时数(0-23)
# %I 12小时制小时数(01-12)
# %M 分钟数(00=59)
# %S 秒(00-59)
# %a 本地简化星期名称
# %A 本地完整星期名称
# %b 本地简化的月份名称
# %B 本地完整的月份名称
# %c 本地相应的日期表示和时间表示
# %j 年内的一天(001-366)
# %p 本地A.M.或P.M.的等价符
# %U 一年中的星期数(00-53)星期天为星期的开始
# %w 星期(0-6),星期天为星期的开始
# %W 一年中的星期数(00-53)星期一为星期的开始
# %x 本地相应的日期表示
# %X 本地相应的时间表示
# %Z 当前时区的名称
# %% %号本身

核心功能在于实现绘制单根数码管线条的函数逻辑。

# 绘制单根数码管
def drawLine(draw):
 turtle.pensize(3)
 turtle.pu
 turtle.fd(3)
 if draw:
 turtle.pd()
 else:
 turtle.pu()
 
 turtle.fd(24)
 turtle.pu()
 turtle.fd(3)
 turtle.right(90)
 
 
# 根据数字绘制数码管
def drawNum(num, color):
 turtle.colormode(255)
 turtle.color(eval(color))
 # 第一条线
 if num in [2, 3, 4, 5, 6, 8, 9]:
 drawLine(True)
 else:
 drawLine(False)
 
 if num in [0, 1, 3, 4, 5, 6, 7, 8, 9]:
 drawLine(True)
 else:
 drawLine(False)
 
 if num in [0, 2, 3, 5, 6, 8, 9]:
 drawLine(True)
 else:
 drawLine(False)
 
 if num in [0, 2, 6, 8]:
 drawLine(True)
 else:
 drawLine(False)
 
 turtle.left(90)
 
 if num in [0, 4, 5, 6, 8, 9]:
 drawLine(True)
 else:
 drawLine(False)
 
 if num in [0, 2, 3, 5, 6, 7, 8, 9]:
 drawLine(True)
 else:
 drawLine(False)
 
 if num in [0, 1, 2, 3, 4, 7, 8, 9]:
 drawLine(True)
 else:
 drawLine(False)
 
 turtle.pu()
 turtle.left(180)
 turtle.fd(30) # 绘制后面数字间隔位置
 turtle.update()

绘制一个完整的7段数码管(例如显示数字8)需要按特定顺序执行。根据具体显示的数字,程序需判断哪些线段需要绘制,哪些仅需移动画笔而不落笔。因此,在绘制单段数码管的函数内部设置了一个draw参数来控制画笔状态。

定义Tick函数,借助threading模块实现定时刷新机制,确保时钟显示实时更新。

def Tick():
 now = time.localtime()
 now_time.n_sec = now.tm_sec
 turtle.reset()
 turtle.hideturtle()
 turtle.pu()
 turtle.fd(-300)
 
 darwDate(str(now.tm_year), '(255, 69, 0)')
 turtle.fd(10)
 turtle.right(90)
 turtle.fd(30)
 turtle.write('年', align="center", font=("Courier", 30, "bold"))
 turtle.left(180)
 turtle.fd(30)
 turtle.right(90)
 turtle.fd(30)
 
 darwDate(str(now.tm_mon), '(0,139,0)')
 turtle.fd(10)
 turtle.right(90)
 turtle.fd(30)
 turtle.write('月', align="center", font=("Courier", 30, "bold"))
 turtle.left(180)
 turtle.fd(30)
 turtle.right(90)
 turtle.fd(30)
 
 darwDate(str(now.tm_mday), '(0,0,139)')
 turtle.fd(10)
 turtle.right(90)
 turtle.fd(30)
 turtle.write('日', align="center", font=("Courier", 30, "bold"))
 turtle.left(180)
 turtle.fd(-90)
 turtle.right(90)
 turtle.fd(-510)
 
 darwDate(str(now.tm_hour))
 turtle.fd(10)
 turtle.right(90)
 turtle.fd(30)
 turtle.write('时', align="center", font=("Courier", 30, "bold"))
 turtle.left(180)
 turtle.fd(30)
 turtle.right(90)
 turtle.fd(30)
 
 darwDate(str(now.tm_min))
 turtle.fd(10)
 turtle.right(90)
 turtle.fd(30)
 turtle.write('分', align="center", font=("Courier", 30, "bold"))
 turtle.left(180)
 turtle.fd(30)
 turtle.right(90)
 turtle.fd(30)
 
 darwDate(str(now.tm_sec))
 turtle.fd(10)
 turtle.right(90)
 turtle.fd(30)
 turtle.write('秒', align="center", font=("Courier", 30, "bold"))
 turtle.left(180)
 turtle.fd(30)
 turtle.right(90)
 turtle.fd(30)
 
 timer = threading.Timer(0.1, Tick) # 利用多线程库定时刷新
 timer.start()

最后,定义程序的主入口函数,负责初始化界面并启动时钟显示。

def mian():
 turtle.hideturtle() # 隐藏画笔
 turtle.speed(0) # 最快
 turtle.tracer(0)
 turtle.pu()
 turtle.fd(-300)
 Tick()
 turtle.done()
# Python turtle模块的海龟作图,由于需要展示海龟运动的过程,缺省状态下,对作图进行了延迟处理,
# 致使复杂图形的绘制速度过慢,可以用如下方法取消延迟,加速绘图:
# 在绘图之前调用tracer
# turtle.tracer(0)
# 在绘图结束时调用update
# turtle.update()
 
mian()

程序运行后的最终视觉效果如下所示。

代码编写完成后,可使用第三方库PyInstaller将其打包为独立的可执行文件。安装Python时建议勾选pip工具及将python.exe添加到系统路径。通过在线方式安装时,可在CMD窗口执行pip install 包名(例如pip install pyInstaller)。需注意,该方式会自动下载并保留第三方库缓存,如需清理需手动删除默认路径下的缓存文件(Windows 7默认路径为C:\Users\(用户名)\AppData\Local\pip\cache,Linux路径为~/.cache/pip)。

等待下载及安装完成后,进入目标文件所在目录,执行pyinstaller -F指令进行打包操作。

打包过程结束后,将在指定目录生成独立的执行文件time.exe。

在打包过程中,可通过添加--icon参数来指定应用程序的图标,其他更多指令可在后续使用中进一步探索。使用Python编写代码时,由于语法对缩进有严格要求,这往往是一个容易出错的细节,但通过反复练习可以熟练掌握。

本文分享了上述全部内容,旨在为读者的学习提供有益参考,同时也欢迎大家继续支持本站。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表