python实现简易数码时钟
作者:长空孤月ysc 发布时间:2023-09-20 12:32:57
最近迷上了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(确保安装时勾选了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指令:
打包后生成独立执行文件time.exe:
打包时还可以通过–icon指令设置指定的图标,还有更多指令等以后用到的时候再研究。用了一段时间的Python,因为语法简洁所以代码的缩进很重要,这也算是一个小坑吧,不过熟能生巧,还需多多练习。
来源:https://blog.csdn.net/u010815486/article/details/82940392


猜你喜欢
- 这篇博客将介绍Canny边缘检测的概念,并利用cv2.Canny()实现边缘检测;Canny边缘检测是一种流行的边缘检测算法。它是由约翰F开
- 本文实例讲述了Python实现拷贝多个文件到同一目录的方法。分享给大家供大家参考,具体如下:有一个文件,里面存有多个文件名,一个文件名一行。
- 一、类型转换 1.转换成字串 ECMAScript的Boolean值、数字和字串的原始值的有趣之处在于它们是伪对象,这意味着它们实际上具有属
- 自己写了玩的一个小脚本,百度图片下载import reimport osimport requestsimport hashlibdef d
- 在Intel的早期,Andy Grove遇到一个雇员 - 他建议公司在芯片的基础上开发个人计算机。AndyGrove疑问道“个人计算机能做什
- 本文实例讲述了python解析多层json操作。分享给大家供大家参考,具体如下:原始文件内容:{ "MaskPolyg
- python简单游戏-反弹球,供大家参考,具体内容如下tkinter实现,直接贴上代码from tkinter import*import
- 一、破解原理其实原理很简单,一句话概括就是「大力出奇迹」,Python 有两个压缩文件库:zipfile 和 rarfile,这两个库提供的
- 在HeadFirstPython网站中下载所有文件,解压后以chapter 3中的“sketch.txt”为例: 新建IDLE会话
- 1. 案例【三酷猫列表记账】操作需求:(1)用列表对象记录三酷猫每天钓鱼的种类和数量(2)统计三酷猫所钓水产品的总数量和预计收获金额(3)打
- 简介如果你经常网上冲浪,这样参差不齐的多栏布局,是不是很眼熟啊?类似的布局,似乎一夜之间出现在国内外大大小小的网站上,比如 Pinteres
- 1. 截取GB2312中文字符串 <?php //截取中文字符串 function mysubstr($str, $star
- format函数的调用format函数可以被直接调用或在print函数中以占位符实现格式化调用。在**2.6**版本前,占位符仍和其他语言一
- 在Windows平台下,如果想运行爬虫的话,就需要在cmd中输入:scrapy crawl spider_name这时,爬虫就能启动,并在控
- 代码如下# -*- coding = utf-8 -*-# @time:2020/5/28/028 21:00# Author:cyx# @
- Nonetype和空值是不一致的,可以理解为Nonetype为不存在这个参数,空值表示参数存在,但是值为空判断方式如下:if hostip
- >>什么是RPCRPC 的全称是 Remote Procedure Call 是一种进程间通信方式。它允许程序调用另一个地址空间
- 1、get方式:如何为爬虫添加ip代理,设置Request header(请求头)import urllib import urllib.r
- 本文实例讲述了Python使用爬虫爬取静态网页图片的方法。分享给大家供大家参考,具体如下:爬虫理论基础其实爬虫没有大家想象的那么复杂,有时候
- 简单了解多子图学习matplotlib的时候,有人肯定会觉得为啥不用Excel,为啥不用origin,为啥不直接使用软件,其实matplot