Python Turtle 实现动态时钟:十二时辰与星空流星效果

server/2024/12/14 21:16:43/

        在这篇文章中,我将带你通过 Python 的 turtle 模块构建一个动态可视化时钟程序。这个时钟不仅具备传统的时间显示功能,还融合了中国古代的十二时辰八卦符号,并通过动态星空、流星效果与昼夜背景切换,为程序增添了观赏性和文化内涵。这是一次将现代编程技术与传统文化元素相结合的实践,非常适合提升编程技巧与创意表达。

项目介绍

我们将实现一个可视化的时钟,主要包含以下功能:

  1. 动态时钟指针:模拟现实中的时钟,具有秒针、分针、时针。
  2. 十二时辰与八卦符号展示:表盘上添加了中国传统的十二时辰与八卦符号,增强文化气息。
  3. 动态星空与流星:在夜晚模式下模拟星空和流星效果,增加动态视觉体验。
  4. 昼夜模式切换:自动判断当前时间,白天和夜晚显示不同背景色。
  5. 随机天气提示:结合当前时辰,给出随机的天气提示,提升趣味性。
  6. 版权信息展示:页面底部显示公司信息,增加程序的专业感。

核心代码解析

以下是项目中主要模块的详细解析:

1. 设置 Turtle 屏幕与标题

首先,通过 turtle 初始化主窗口,设置窗口大小、背景色及标题。

def setup_screen():turtle.setup(800, 1000)  # 窗口大小turtle.bgcolor("black")  # 初始背景为黑夜turtle.title("动态时钟与真实流星 + 星空 + 昼夜模式")turtle.tracer(0)  # 关闭自动刷新,提升性能
2. 绘制时钟表盘与刻度

使用 turtle 绘制标准的圆形表盘,并添加小时与分钟刻度。

def draw_clock_face():pen = turtle.Turtle()pen.speed(0)pen.hideturtle()pen.color("white")# 绘制外圆pen.penup()pen.goto(0, -200)pen.pendown()pen.circle(200)# 绘制刻度for i in range(60):pen.penup()pen.goto(0, 0)pen.setheading(-6 * i + 90)pen.forward(180)pen.pendown()if i % 5 == 0:  # 每5个刻度为大刻度pen.forward(20)else:pen.forward(10)
3. 添加十二时辰与八卦符号

将十二时辰和八卦符号分布在表盘周围,利用 setheading 精确定位文本位置。

shichen_mapping = [('子', '胆经当令, 万籁俱静正好眠'),...
]
bagua_symbols = ["乾", "兑", "离", "震", "巽", "坎", "艮", "坤"]def draw_bagua_and_shichen():pen = turtle.Turtle()pen.hideturtle()pen.color("yellow")# 绘制十二时辰for i, (shichen, _) in enumerate(shichen_mapping):pen.penup()pen.goto(0, 0)pen.setheading(-30 * i + 90)pen.forward(260)pen.write(shichen, align="center", font=("Courier", 14, "bold"))# 绘制八卦符号pen.color("cyan")for i, symbol in enumerate(bagua_symbols):pen.penup()pen.goto(0, 0)pen.setheading(-45 * i + 90)pen.forward(220)pen.write(symbol, align="center", font=("Courier", 18, "bold"))
4. 绘制动态星空与流星

通过随机坐标绘制星星,流星的尾迹采用不同的亮度与宽度来实现渐变效果。

def draw_static_stars():star_pen.clear()star_pen.color("white")for _ in range(80):x = random.randint(-400, 400)y = random.randint(-400, 400)star_pen.penup()star_pen.goto(x, y)star_pen.pendown()star_pen.dot(random.randint(1, 3))def draw_meteor():meteor_pen.clear()meteor_pen.penup()x_start = random.randint(-400, 400)y_start = random.randint(200, 400)x_end = x_start - random.randint(50, 150)y_end = y_start - random.randint(50, 150)meteor_pen.goto(x_start, y_start)meteor_pen.pendown()for i in range(10):brightness = 1.0 - (i / 10)meteor_pen.pencolor((brightness, brightness, brightness))meteor_pen.width(3 - i / 4)meteor_pen.goto(x_start - (x_start - x_end) * (i / 10),y_start - (y_start - y_end) * (i / 10))
5. 动态时钟指针与时辰描述

每秒更新时钟状态,展示当前时辰描述与随机天气。

def update_clock(sec_hand, min_hand, hour_hand, label_pen):now = datetime.datetime.now()sec = now.secondminute = now.minute + sec / 60hour = (now.hour % 12) + minute / 60# 更新指针角度sec_hand.setheading(-6 * sec + 90)min_hand.setheading(-6 * minute + 90)hour_hand.setheading(-30 * hour + 90)# 显示时辰信息label_pen.clear()shichen_index = (now.hour % 24) // 2info = shichen_mapping[shichen_index]label_pen.goto(0, -350)label_pen.write(f"当前时辰:{info[0]}时\n{info[1]}\n天气:{random.choice(['晴', '多云', '小雨'])}",align="center", font=("Courier", 16, "bold"))draw_static_stars()draw_meteor()update_background()turtle.update()turtle.ontimer(lambda: update_clock(sec_hand, min_hand, hour_hand, label_pen), 1000)

总结

通过 turtle 库的巧妙运用,我们成功实现了一个融合动态时钟、星空、十二时辰和八卦符号的现代 Python 项目。这个程序不仅提升了编程技能,还将传统文化与技术进行了深度结合。


http://www.ppmy.cn/server/150186.html

相关文章

轮播(css+js)

目录 1.实现效果 2.基础代码演示 2.1js代码 2.1css样式 2.3实现效果 3.实现点击切换 3.1给button添加点击事件 3.2效果图如下 3.3发现问题 3.3.1不循环 3.3.2循环 1.实现效果 2.基础代码演示 2.1js代码 <div class"out-box"><div class"tes…

Java SpringBoot 项目怎样在 IDEA 中运行、部署

大家好&#xff0c;我是程序员徐师兄&#xff0c;今天为大家带来的是Java SpringBoot 项目怎样在 IDEA 中运行、部署。Java 项目的安装部署教程&#xff0c;包括软件的下载&#xff0c;软件的安装。该系统采用 Java 语言开发&#xff0c;SpringBoot 框架&#xff0c;MySql 作为…

如何写出优秀的单元测试?

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 写出优秀的单元测试需要考虑以下几个方面&#xff1a; 1. 测试用例设计 测试用例应该覆盖被测试代码的不同场景和边界情况&#xff0c;以尽可能发现潜在的问题。…

Ansible运维实战-自动化安装nginx

Ansible运维实战 1.Ansible自动化安装nginx (1).环境准备 我们创建两台虚拟机分别为server节点、host1节点 两个节点根据节点规划来修改主机名 我们在server节点下安装ansible、其余节点不进行配置 节点 Ip地址 Server节点 192.168.77.171 Host1节点 192.168.77.172 …

Vue路由进阶攻略

目录 一、路由配置 1、概述&#xff1a; 2、在 Vite 项目中进行路由配置通常涉及以下步骤&#xff1a; &#xff08;1&#xff09;安装和引入Vue Router&#xff1a; &#xff08;2&#xff09;定义路由组件&#xff1a; &#xff08;3&#xff09;配置路由&#xff1a; …

MyBatis缓存

目录 ​编辑 一、MyBatis运行顺序 二、一级缓存 &#xff08;1&#xff09;一级缓存失效的四种情况 1.查询时所使用的sqlSession不同 2.sqlSession相同但是当前查询条件不同 3.sqlSesssion相同&#xff0c;但两次查询之间进行了增删改的操作 4.手动清除了一切缓存 三、…

(RHCE)工程师学习考证

如果你像我一样&#xff0c;非科班出身且对 IT 行业知识储备几乎为零&#xff0c;却立志考取 RHCE 红帽工程师证书&#xff0c;那么以下这份学习教程或许能助你一臂之力。 首先&#xff0c;要对 RHCE 有个基本的认识。RHCE 是红帽企业级 Linux 认证&#xff0c;它侧重于实际操作…

【汽车】-- 燃油发动机3缸和4缸

3缸和4缸燃油发动机是小轿车常见的发动机配置。以下从结构特点、性能、经济性等方面对两者进行对比&#xff0c;并分析优缺点及使用注意事项&#xff1a; 1. 结构与运行原理 3缸发动机 特点&#xff1a;少一个气缸&#xff0c;内部零部件更少&#xff0c;整体结构更紧凑。优点…