小案例:基于python的动态时钟,带十二时辰和经络养身

一、前言

1、仅用来研究学习使用。
2、除正常显示时钟外,还可以实时显示当前对应的时辰,和经络养身提示。

3、适合辅助上班族来养生

二、效果如下:



三、源码如下:

'''
动态时钟附带十二时辰显示
'''
import turtle  # 导入绘图海龟模块
import datetime  # 导入日期时间模块# 十二时辰对照表(地支)
dizhi = {'23': ['子', '胆经当令, 万籁俱静正好眠'],'0': ['子', '胆经当令, 万籁俱静正好眠'],'1': ['丑', '肝经当令,肝脏藏血不熬夜'],'2': ['丑', '肝经当令,肝脏藏血不熬夜'],'3': ['寅', '肺经当令,肺脏主气好歇息'],'4': ['寅', '肺经当令,肺脏主气好歇息'],'5': ['卯', '大肠经当令,大肠当值宜排便'],'6': ['卯', '大肠经当令,大肠当值宜排便'],'7': ['辰', '胃经当令,食用早餐正当时'],'8': ['辰', '胃经当令,食用早餐正当时'],'9': ['巳', '脾经当令,脾经当值精神足'],'10': ['巳', '脾经当令,脾经当值精神足'],'11': ['午', '心经当令,心主神明当小憩'],'12': ['午', '心经当令,心主神明当小憩'],'13': ['未', '小肠经当令,畅通血管多喝水'],'14': ['未', '小肠经当令,畅通血管多喝水'],'15': ['申', '膀胱经当令,工作学习练身体'],'16': ['申', '膀胱经当令,工作学习练身体'],'17': ['酉', '肾经当令,养经两相宜'],'18': ['酉', '肾经当令,养经两相宜'],'19': ['戌', '心包经当令,心包当令宜散步谈心'],'20': ['戌', '心包经当令,心包当令宜散步谈心'],'21': ['亥', '三焦经当令,温水泡脚助安眠'],'22': ['亥', '三焦经当令,温水泡脚助安眠']
}# 获取当前时间
today = datetime.datetime.today()# 移动一段距离
def skip(distance):  # 移动方法,不留移动痕迹turtle.penup()  # 抬笔不绘制turtle.forward(distance)  # 移动指定距离turtle.pendown()  # 落笔移动绘制def draw_clock_dial():  # 绘制表盘的方法turtle.reset()  # 删除图形归位turtle.hideturtle()  # 隐藏箭头for i in range(60):  # 循环执行60次,一圈为360度所以每一秒的角度为6度skip(160)  # 移动160,相当于表盘圆的半径# 每5秒绘制一个小时刻度if i % 5 == 0:turtle.pensize(7)  # 刻度大小# 画时钟turtle.forward(20)  # 小时刻度的长度为20if i == 0:  # 判断第一个位置为12点# 写入数字12turtle.write(12, align='center', font=('Courier', 14, 'bold'))elif i == 25 or i == 30 or i == 35:  # 5、6、7skip(25)  # 避免与刻度重叠,所以多移动一段距离# 根据i除以5获取,5点、6点、7点并写入对应的数字turtle.write(int(i / 5), align='center', font=('Courier', 14, 'bold'))skip(-25)  # 回到原位置else:# 根据i除以5获取其它时间的数字并写入turtle.write(int(i / 5), align='center', font=('Courier', 14, 'bold'))skip(-20)  # 复原小时刻度的位置else:turtle.pensize(1)  # 将画笔大小设置为1turtle.dot()  # 绘制分钟刻度的小圆点skip(-160)  # 回到中心位置turtle.right(6)  # 向右旋转6度def draw_shichen_clock_dial(shichen):  # 绘制十二时辰表盘的方法today = datetime.datetime.today()forenoon, afternoon = {}, {}for i in shichen.items():if int(i[0]) >= 12:afternoon[i[0]] = i[1]else:forenoon[i[0]] = i[1]# 做个判断,大于12点用后半日时辰if today.hour >= 12:show_shichen_time = afternoonelse:show_shichen_time = forenoonfor i in show_shichen_time.items():  # 循环执行12次,一圈为360度所以每次的角度为30度skip(240)turtle.write(i[1][0], align='center', font=('Courier', 16, 'bold'))skip(-240)  # 回到中心位置turtle.right(30)  # 向右旋转30度def draw_old_clock_dial():  # 绘制表盘的当前时辰和当值经络turtle.hideturtle()  # 隐藏箭头skip(100)turtle.color('red')shichen = get_sc(today.hour)turtle.write('当前:' + shichen[0], align='center', font=('Courier', 16, 'bold'))skip(-380)turtle.write(shichen[1], align='center', font=('Courier', 16, 'bold'))skip(280)  # 回中心点位置# 获取时间对应的具体时辰
def get_sc(hour):shichen = []if hour >= 0:hour = str(hour)shichen.append(dizhi.get(hour)[0] + '时')shichen.append(dizhi.get(hour)[1])else:shichen = '时间参数错误'return shichendef get_week(t):  # 获取星期的方法week = ['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期日']return week[t.weekday()]  # 返回当天的星期def create_pointer(length, name, color='red'):  # 创建指针方法turtle.reset()  # 删除图形归位skip(-length * 0.1)  # 抬笔移动指定距离turtle.begin_poly()  # 记录多边形turtle.forward(length * 1.1)  # 绘制指定长度的指针turtle.end_poly()  # 停止记录多边形# 注册多边形状turtle.register_shape(name, turtle.get_poly())def init_pointer():  # 初始化指针global secHand, minHand, hurHand, printerturtle.mode("logo")  # 重置Turtle指向上create_pointer(135, "secHand")  # 创建秒针图形create_pointer(110, "minHand")  # 创建分针图形create_pointer(80, "hurHand")  # 创建时针图形secHand = turtle.Turtle()  # 创建秒针turtle对象secHand.shape("secHand")  # 创建指定秒针名称的形状minHand = turtle.Turtle()  # 创建分针turtle对象minHand.shape("minHand")  # 创建指定分针名称的形状hurHand = turtle.Turtle()  # 创建时针turtle对象hurHand.shape("hurHand")  # 创建指定时针名称的形状for hand in secHand, minHand, hurHand:  # 循环遍历三个指针hand.shapesize(1, 1, 5)  # 设置形状拉伸大小和轮廓线hand.speed(0)  # 设置速度为最快printer = turtle.Turtle()  # 创建绘制文字的Turtle对象printer.hideturtle()  # 隐藏箭头printer.penup()  # 抬笔def move_pointer():  # 移动指针的方法# 不停的获取时间t = datetime.datetime.today()second = t.second + t.microsecond * 0.000001  # 计算移动的秒minute = t.minute + second / 60  # 计算移动的分hour = t.hour + minute / 60  # 计算移动的小时secHand.setheading(6 * second)  # 设置秒针的角度minHand.setheading(6 * minute)  # 设置分针的角度hurHand.setheading(30 * hour)  # 设置时针的角度turtle.tracer(False)  # 关闭绘画效果printer.forward(65)  # 向上移动65# 绘制星期printer.write(get_week(t), align="center", font=("Courier", 14, "bold"))printer.back(130)  # 倒退130# 绘制年月日printer.write(t.strftime('%Y-%m-%d'), align="center", font=("Courier", 14, "bold"))printer.home()  # 归位turtle.tracer(True)  # 开启绘画效果turtle.ontimer(move_pointer, 10)  # 10毫秒后调用move_pointer()方法if __name__ == '__main__':turtle.setup(650, 650)  # 创建窗体大小init_pointer()  # 调用初始化指针的方法turtle.tracer(False)  # 关闭绘画效果draw_clock_dial()  # 绘制表盘draw_shichen_clock_dial(dizhi)draw_old_clock_dial()  # 绘制十二时辰表盘move_pointer()  # 调用移动指针的方法turtle.mainloop()  # 不关闭窗体

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/473056.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【海淘域名】GoDaddy账户被锁定后的解决方法

转载自【美国海淘网】http://www.usahaitao.com/Experience/Detail_2886.html通过ICANN申诉顺利的从国内无良奸商(35互联与商务中国,小编的域名在这2个大的服务商手中。不过开始都是图便宜,不懂得国内域名管理的黑幕,所以从其下属的皮包第三方手里购入域…

回归分析常数项t值没有显著异于零怎么办_线性回归分析思路总结!简单易懂又全面!...

线性回归分析是一种研究影响关系的方法,在实际研究里非常常见。不管你有没有系统学习过,对于线性回归,相信多少都有那么一点了解。即使如此,在实际分析时,还是会碰到很多小细节,让我们苦思冥想困扰很久&…

LeetCode 1733. 需要教语言的最少人数(哈希+枚举)

文章目录1. 题目2. 解题1. 题目 在一个由 m 个用户组成的社交网络里,我们获取到一些用户之间的好友关系。 两个用户之间可以相互沟通的条件是他们都掌握同一门语言。 给你一个整数 n ,数组 languages 和数组 friendships ,它们的含义如下&a…

在c#中用mutex类实现线程的互斥_面试官经常问的synchronized实现原理和锁升级过程,你真的了解吗...

本篇文章主要从字节码和JVM底层来分析synchronized实现原理和锁升级过程,其中涉及到了简单认识字节码、对象内部结构以及ObjectMonitor等知识点。阅读本文之前,如果大家对synchronized关键字的基本使用还不是很了解的话,推荐阅读笔者之前的一…

TensorFlow 2.x GPU版在conda虚拟环境下安装步骤

先下载安装驱动:https://www.nvidia.cn/Download/index.aspx?langcn,版本要求 WSL cuda 驱动 https://developer.nvidia.com/cuda/wsl 下载安装 anaconda,管理虚拟环境:https://www.anaconda.com/products/individual&#xff0…

如何通过网络将文件传输到嵌入式设备_嵌入式系统 Boot Loader技术内幕,带你完全了解Boot Loader...

一个嵌入式 Linux 系统从软件的角度看通常可以分为四个层次:1. 引导加载程序。包括固化在固件(firmware)中的 boot 代码(可选),和 Boot Loader 两大部分。2. Linux 内核。特定于嵌入式板子的定制内核以及内核的启动参数。3. 文件系统。包括根文件系统和建…

python获取当前路径的方法_Python获取脚本所在目录的正确方法【转】

原博文 2015-09-24 10:21 − 1.以前的方法如果是要获得程序运行的当前目录所在位置,那么可以使用os模块的os.getcwd()函数。如果是要获得当前执行的脚本的所在目录位置,那么需要使用sys模块的sys.path[0]变量或者sys.argv[0]来获得。实际上sys.path是Pyt…

TensorFlow 2.0 - Checkpoint 保存变量、TensorBoard 训练可视化

文章目录1. Checkpoint 保存变量2. TensorBoard 训练过程可视化学习于:简单粗暴 TensorFlow 2 1. Checkpoint 保存变量 tf.train.Checkpoint 可以保存 tf.keras.optimizer 、 tf.Variable 、 tf.keras.Layer 、 tf.keras.Model path "./checkp.ckpt" …

coturn的负载均衡特性_高性能负载均衡

单服务器无论如何优化,无论采用多好的硬件,总会有一个性能天花板,当单服务器的性能无法满足业务需求时,就需要设计高性能集群来提升系统整体的处理性能。高性能集群的本质很简单,通过增加更多的服务器来提升系统整体的…

LintCode MySQL 1928. 网课上课情况分析 I

文章目录1. 题目2. 解题1. 题目 online_class_situation 表展示了一些同学上网课的行为活动。 每行数据记录了一名同学在退出网课之前,当天使用同一台设备登录课程后听过的课程数目(可能是0个)。 写一条 SQL 语句,查询每位同学第…

python输入十个数输出最大值_python输入十个数如何输出最大值

python输入十个数输出最大值的方法:1、如果是整数的话,使用函数【a, b, c map(int, input().split())】;2、使用函数【Xinput().split()】。 相关免费学习推荐:python视频教程 python输入十个数输出最大值的方法: 第一…

LintCode MySQL 1921. 从不充值的玩家(where not in)

文章目录1. 题目2. 解题1. 题目 描述 A game database contains two tables, player table and recharge table. Write a SQL query to find all players who never recharge. 样例 https://www.lintcode.com/problem/players-who-never-recharge/description 2. 解题 -- …

古风一棵桃花树简笔画_广东有个现实版的“桃花源”,藏于秘境之中,最适合情侣来度假!...

上学时,初闻“芳草鲜美,落英缤纷”,并没有多大感触。直到后来长大离家,每每为生活奔波劳累时,为工作琐碎忧心费神时,才骤然明了当年五柳先生所描绘的“桃花源”该是多少人的脑中所想、心中所向……原以为这…

clob和blob是不是可以进行模糊查询_你知道什么是 MySQL 的模糊查询?

作者 | luanhz责编 | 郭芮本文对MySQL中几种常用的模糊搜索方式进行了介绍,包括LIKE通配符、RegExp正则匹配、内置字符串函数以及全文索引,最后给出了性能对比。引言MySQL根据不同的应用场景,支持的模糊搜索方式有多种,例如应用最…

LintCode 1917. 切割剩余金属

文章目录1. 题目2. 解题1. 题目 描述 金属棒工厂的厂长拥有 n 根多余的金属棒。 当地的一个承包商提出,只要所有的棒材具有相同的长度(用 saleLength 表示棒材的长度),就将金属棒工厂的剩余棒材全部购买。 厂长可以通过将每根棒…

太原理工电子信焦工程_电气工程及其自动化专业毕业后做什么工作?近几年就业和收入怎样...

本文内容为各大高校往届大学生真实的现身说法内容,但因为是往届,每年该专业的大学情况可能会发生略微变化,所以部分内容较今年,明年甚至以后几年,实际情况可能会略有不同但是对于本专业的相关信息还是非常有参考价值的…

怎么查看linux日志里请求量最高的url访问最多的_实用的Linux高级命令,开发运维都要懂!...

在运维的坑里摸爬滚打好几年了,我还记得我刚开始的时候,我只会使用一些简单的命令,写脚本的时候,也是要多简单有多简单,所以有时候写出来的脚本又长又臭。像一些高级点的命令,比如说 Xargs 命令、管道命令、…

ggplot2箱式图两两比较_第十九章_使用ggplot2进行高级绘图

介绍ggplot2包使用形状、颜色和尺寸来对多元数据进行可视化用刻面图比较各组自定义ggplot2图19.1 R中的四种图形系统基础gridlatticeggplot2(用的较多)gghub需要的R包ggpolt2gridExtra(可以拼图)car19.2 ggplot2介绍library(ggplot2)ggplot(datamtcars, aes(xwt, ympg)) geom_p…

LeetCode 1742. 盒子中小球的最大数量

文章目录1. 题目2. 解题1. 题目 你在一家生产小球的玩具厂工作,有 n 个小球,编号从 lowLimit 开始,到 highLimit 结束(包括 lowLimit 和 highLimit ,即 n highLimit - lowLimit 1)。 另有无限数量的盒子…

bash shell命令(1)

本文地址:http://www.cnblogs.com/archimedes/p/bash-shell1.html,转载请注明源地址。 ls命令 ls用来列出目录的内容,它是用户最常用的命令之一,ls命令的格式为: ls[选项][目录名或文件名] 选项的主要参数:…