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中使用item()方法遍历字典的例子
Aug 26 Python
在Python3中使用asyncio库进行快速数据抓取的教程
Apr 02 Python
Django的分页器实例(paginator)
Dec 01 Python
浅谈用VSCode写python的正确姿势
Dec 16 Python
python删除文本中行数标签的方法
May 31 Python
Python 修改列表中的元素方法
Jun 26 Python
python判断文件是否存在,不存在就创建一个的实例
Feb 18 Python
一文了解Python并发编程的工程实现方法
May 31 Python
pytorch神经网络之卷积层与全连接层参数的设置方法
Aug 18 Python
用Pelican搭建一个极简静态博客系统过程解析
Aug 22 Python
python/golang实现循环链表的示例代码
Sep 14 Python
python实现图片批量压缩
Apr 24 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
56.com视频采集接口程序(PHP)
2007/09/22 PHP
PHP JS Ip地址及域名格式检测代码
2013/09/27 PHP
php 获取xml接口数据的处理方法
2018/05/31 PHP
php文件包含的几种方式总结
2019/09/19 PHP
Jquery 滑入滑出效果实现代码
2010/03/27 Javascript
ajax请求get与post的区别总结
2013/11/04 Javascript
利用jq让你的div居中的好方法分享
2013/11/21 Javascript
node.js中的http.response.write方法使用说明
2014/12/14 Javascript
JavaScript 事件入门知识
2015/04/13 Javascript
在Mac OS下使用Node.js的简单教程
2015/06/24 Javascript
图解JavaScript中的this关键字
2020/05/28 Javascript
动态更新highcharts数据的实现方法
2016/05/28 Javascript
详解AngularJS中的表单验证(推荐)
2016/11/17 Javascript
BootStrap Validator对于隐藏域验证和程序赋值即时验证的问题浅析
2016/12/01 Javascript
js随机生成一个验证码
2017/06/01 Javascript
Angular2 自定义validators的实现方法
2017/07/05 Javascript
vue组件父与子通信详解(一)
2017/11/07 Javascript
使用puppeteer破解极验的滑动验证码
2018/02/24 Javascript
javascript将非数值转换为数值
2018/09/13 Javascript
详解Vue源码之数据的代理访问
2018/12/11 Javascript
vue-cli3环境变量与分环境打包的方法示例
2019/02/18 Javascript
JS实现的全选、全不选及反选功能【案例】
2019/02/19 Javascript
javascript前端和后台进行数据交互方法示例
2020/08/07 Javascript
[01:01:52]DOTA2-DPC中国联赛正赛 iG vs LBZS BO3 第一场 3月4日
2021/03/11 DOTA
python数字图像处理实现直方图与均衡化
2018/05/04 Python
Python绘制三角函数图(sin\cos\tan)并标注特定范围的例子
2019/12/04 Python
Python操作MongoDb数据库流程详解
2020/03/05 Python
python GUI库图形界面开发之PyQt5滚动条控件QScrollBar详细使用方法与实例
2020/03/06 Python
新加坡领先的时尚生活方式零售品牌:CHARLES & KEITH
2018/01/16 全球购物
关联、聚合(Aggregation)以及组合(Composition)的区别
2012/02/29 面试题
小学生考试获奖感言
2014/01/30 职场文书
政风行风自查自纠报告
2014/10/21 职场文书
见习报告的格式
2014/11/04 职场文书
行为习惯主题班会
2015/08/14 职场文书
粗暴解决CUDA out of memory的问题
2021/05/22 Python
Java实现添加条码或二维码到Word文档
2022/06/01 Java/Android