python实现简易数码时钟


Posted in Python onFebruary 19, 2021

最近迷上了Python,要说为什么呢?Python语法简单,功能强大,有广泛的第三方库能快速编程实现自己的想法(无需重复去造轮子)。就像某位前辈说的:“人生苦短,学会偷懒…”,配置好sublime text照着网上教程直接上手写个小程序入门。

先插张图,计算机技术的演进过程,总结的还是挺到位的。

python实现简易数码时钟

安装好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 当前时区的名称
# %% %号本身

python实现简易数码时钟

绘制数码管函数:

# 绘制单根数码管
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。

python实现简易数码时钟

定义一个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()

最终效果:

python实现简易数码时钟

代码写好后,可以打包成一个可执行文件,这里需要用到第三方库PyInstaller;安装第三方库Python封装了包管理工具pip(确保安装时勾选了pip和Add python.exe to Path)。这里我用在线安装的方式,在cmd窗口直接运行:pip install 包名,如 pip install pyInstaller,注意:这种方式安装时会自动下载第三方库,安装完成后并不会删除,如需删除请到它的默认下载路径下手动删除。(win7的默认路径://AppData可能是隐藏文件夹 c:\用户\(你的用户名)\AppData\Local\pip\cache\ linux的默认路径: ~/.cache/pip)

耐心等待下载并安装后,就可以使用PyInstaller了,在需要打包的文件目录下运行pyinstaller -F指令:

python实现简易数码时钟

打包后生成独立执行文件time.exe:

python实现简易数码时钟

打包时还可以通过?icon指令设置指定的图标,还有更多指令等以后用到的时候再研究。用了一段时间的Python,因为语法简洁所以代码的缩进很重要,这也算是一个小坑吧,不过熟能生巧,还需多多练习。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
深入学习Python中的装饰器使用
Jun 20 Python
Python实现判断字符串中包含某个字符的判断函数示例
Jan 08 Python
python实现list由于numpy array的转换
Apr 04 Python
python MNIST手写识别数据调用API的方法
Aug 08 Python
Python使用Flask-SQLAlchemy连接数据库操作示例
Aug 31 Python
在pyqt5中QLineEdit里面的内容回车发送的实例
Jun 21 Python
python实现beta分布概率密度函数的方法
Jul 08 Python
python飞机大战pygame游戏背景设计详解
Dec 17 Python
TensorFlow实现从txt文件读取数据
Feb 05 Python
Python制作简易版小工具之计算天数的实现思路
Feb 13 Python
浅谈Python数学建模之整数规划
Jun 23 Python
python如何为list实现find方法
May 30 Python
python爬取淘宝商品销量信息
Nov 16 #Python
python爬取网易云音乐评论
Nov 16 #Python
python实现将汉字保存成文本的方法
Nov 16 #Python
python 字符串只保留汉字的方法
Nov 16 #Python
Python 创建新文件时避免覆盖已有的同名文件的解决方法
Nov 16 #Python
用python标准库difflib比较两份文件的异同详解
Nov 16 #Python
在Pandas中给多层索引降级的方法
Nov 16 #Python
You might like
Ajax+PHP 边学边练之四 表单
2009/11/27 PHP
windows下升级PHP到5.3.3的过程及注意事项
2010/10/12 PHP
php Smarty 字符比较代码
2011/02/27 PHP
浅析51个PHP处理字符串的函数
2013/08/02 PHP
老生常谈ThinkPHP中的行为扩展和插件(推荐)
2017/05/05 PHP
PHP/ThinkPHP实现批量打包下载文件的方法示例
2017/07/31 PHP
5 cool javascript apps
2007/03/24 Javascript
从阶乘函数对比Javascript和C#的异同
2012/05/31 Javascript
JavaScript转换农历类实现及调用方法
2013/01/27 Javascript
window.location.reload()方法刷新页面弹出要再次显示该网页对话框
2013/04/24 Javascript
Js操作Select大全(取值、设置选中等等)
2013/10/29 Javascript
Node.js中使用Log.io在浏览器中实时监控日志(等同tail -f命令)
2014/09/17 Javascript
js实现类似新浪微博首页内容渐显效果的方法
2015/04/10 Javascript
JS基于面向对象实现的拖拽库实例
2015/09/24 Javascript
JS中用三种方式实现导航菜单中的二级下拉菜单
2016/10/31 Javascript
js实现图片旋转 js滚动鼠标中间对图片放大缩小
2017/07/05 Javascript
使用vue-route 的 beforeEach 实现导航守卫(路由跳转前验证登录)功能
2018/03/22 Javascript
JS实现json数组排序操作实例分析
2019/10/28 Javascript
Python中的urllib模块使用详解
2015/07/07 Python
Python压缩解压缩zip文件及破解zip文件密码的方法
2015/11/04 Python
基于python3 类的属性、方法、封装、继承实例讲解
2017/09/19 Python
python使用 HTMLTestRunner.py生成测试报告
2017/10/20 Python
python cv2读取rtsp实时码流按时生成连续视频文件方式
2019/12/25 Python
pytorch VGG11识别cifar10数据集(训练+预测单张输入图片操作)
2020/06/24 Python
Python GUI之tkinter窗口视窗教程大集合(推荐)
2020/10/20 Python
HTML5 WebGL 实现民航客机飞行监控系统
2019/07/25 HTML / CSS
定制iPhone和Macbook保护壳:Slick Case
2018/11/21 全球购物
PHP如何去执行一个SQL语句
2016/03/05 面试题
静态成员和非静态成员的区别
2012/05/12 面试题
个人公开承诺书
2014/03/28 职场文书
简单租房协议书范本
2014/08/20 职场文书
2014社区健康教育工作总结
2014/12/16 职场文书
Python爬取科目四考试题库的方法实现
2021/03/30 Python
新手初学Java List 接口
2021/07/07 Java/Android
springboot+WebMagic+MyBatis爬虫框架的使用
2021/08/07 Java/Android
PostgreSQL怎么创建分区表详解
2022/06/25 PostgreSQL