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

        在这篇文章中,我将带你通过 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.mzph.cn/news/889453.shtml

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

相关文章

将PDF流使用 canvas 绘制然后转为图片展示在页面上(二)

将PDF流转为图片展示在页面上 使用 pdfjs-dist 库来渲染 PDF 页面到 canvas 上,然后将 canvas 转为图片 安装 pdfjs-dist 依赖 npm install pdfjs-dist 或者 yarn add pdfjs-dist创建一个组件来处理 PDF 流的加载和渲染 该组件中是一个包含 PDF 文件的 ArrayBuffer…

UOS AI 2.0 发布,开启原生 AIOS 时代!

PC 终端作为最主流最高频的生产力工具,其操作系统承载着用户的大量场景、数据以及技能。随着生成式人工智能浪潮的来临,新的技术架构、交互模式和新的生态,都需要操作系统承担起更多责任,即需要新一代的操作系统产品 ——AIOS&…

使用CSS变量和JavaScript实现鼠标跟随渐变

实现鼠标跟随渐变效果的详细过程&#xff1a; 1. HTML 结构 我们在 HTML 中创建了一个 <div> 元素&#xff0c;用于展示渐变效果。这个元素的 ID 是 gradient-box&#xff0c;方便在 JavaScript 中进行操作。 2. CSS 样式 CSS 变量&#xff1a;在 :root 中定义了两个…

监控易监测对象及指标之:宝兰德中间件JMX监控指标解读

监控易作为一款全面的IT监控软件&#xff0c;能够为企业提供深入、细致的监控服务&#xff0c;确保企业IT系统的稳定运行。在本文中&#xff0c;我们将详细解读监控易针对宝兰德中间件JMX的监控指标&#xff0c;以帮助用户更好地理解和应用这些监控数据。 监测指标概览&#x…

数据仓库-集群管理

主要介绍操作类问题中的集群管理问题。 无法成功创建数据仓库集群时怎么处理&#xff1f; 请检查用户账户余额是否少于100元&#xff0c;是否已经没有配额创建新的数据仓库集群&#xff0c;以及是否存在网络问题。 如账户余额、配额、网络均未发现问题&#xff0c;请联系客户…

avue-crud 同时使用 column 与 group 的问题

场景一&#xff1a;在使用option 中的column 和 group 进行表单数据新增操作时&#xff0c;进行里面的控件操作时&#xff0c;点击后卡死问题&#xff0c;文本没问题 其它比如下拉&#xff0c;单选框操作&#xff0c;当删除 column 中的字段后&#xff0c; group 中的可以操作 …

期魔方风控模型之委托失败补单程序

你知道吗&#xff1f;只需简单设置&#xff0c;期魔方风控模型就能自动处理风控委托失败的订单&#xff0c;进行补单操作。 那么&#xff0c;这种功能适用于哪些场景呢&#xff1f;让我们一起来探讨一下&#xff01; 在实际交易中&#xff0c;我们有时会遇到在任意交易终端&a…

php.ini 文件上传/执行时间/部分配置新手教程

1、上传文件大小配置 一般需要同时配置“upload_max_filesize”、“post_max_size”&#xff0c;配置格式如下&#xff1a; file_uploads On ;是否允许HTTP文件上传 upload_max_filesize 2M ;设置单个文件上传的最大尺寸 post_max_size 8M ;设置 POST 请求体的最大尺寸&am…

ubuntu系统的docker安装(2)

查看系统版本 lsb_release -asudo systemctl status docker查看docker是否安装成功 docker pull拉取镜像不成功/docker run不成功 可能有多种原因&#xff1a;网络链接不稳定&#xff0c;没有重启docker&#xff0c;可以先将docker源设置为国内镜像源 sudo systemctl rest…

Source Insight的使用经验汇总

01-Add All"和“Add Tree”有何区别&#xff1f; 在 Source Insight 中&#xff0c;“Add All”和“Add Tree”是两种向项目&#xff08;Project&#xff09;中添加文件的操作选项&#xff0c;它们的区别在于处理文件和目录的方式不同&#xff1a; 1. Add All 范围&am…

数据库表的CRUD

SQL语句&#xff08;Structured Query Language&#xff09;是用于与关系型数据库进行交互的语言。下面是几个常用的SQL语句&#xff1a; 创建表&#xff1a; CREATE TABLE table_name ( column1 datatype, column2 datatype, column3 datatype, ... ); 插入数据&#xff1a; …

解析博客项目基础需求(一)

个人技术博客项目需求分析 1. 功能需求 1.1 基础功能 博客文章展示文章分类管理文章标签系统文章归档功能文章搜索功能评论系统响应式设计 1.2 扩展功能 文章阅读量统计文章点赞功能个人介绍页面项目展示页面友情链接暗黑模式切换 2. 技术栈选择 2.1 前端技术 Vue 3 (框…

图片增加模糊

为了实现一个既能等比放大缩小图片又能按照不同数值模糊图片的算法&#xff0c;我们可以利用Python结合OpenCV库来完成。下面将详细描述如何构建这样一个算法&#xff0c;并提供完整的代码示例。 算法步骤 导入必要的库&#xff1a;首先需要导入cv2&#xff08;OpenCV&#x…

【速览】设计模式(更新中)

目录 模式的历史设计模式是什么设计原则 SOLID1. 单一职责原则&#xff08;Single Responsibility Principle, SRP&#xff09;2. 开闭原则&#xff08;Open/Closed Principle, OCP&#xff09;3. 里氏替换原则&#xff08;Liskov Substitution Principle, LSP&#xff09;4. 接…

MVC基础——市场管理系统(四)

文章目录 项目地址六、EF CORE6.1 配置ef core环境6.2 code first6.2.1 创建Database context1. 添加navigation property2. 添加MarketContext上下文七、Authentication7.1 添加Identity7.2 Run DB migration for Identity7.3 使用Identity7.3.1 设置认证中间件7.3.2 设置权限…

前端编辑器JSON HTML等,vue2-ace-editor,vue3-ace-editor

与框架无关 vue2-ace-editor有问题&#xff0c;ace拿不到&#xff08;brace&#xff09; 一些组件都是基于ace-builds或者brace包装的 不如直接用下面的&#xff0c;不如直接使用下面的 <template><div ref"editor" class"json-editor"><…

算法训练营day1 | 704二分查找,27移除元素, 34, 35

已经找到工作&#xff0c;但希望再试试春招&#xff0c;距离春招还剩两个月&#xff0c;加油。 这两道题都刷过很多遍了&#xff0c;没什么好说的直接过。 704 本以为刷了很多次没想到还是做错了&#xff0c;有些小细节要注意。 这里是迭代式的&#xff0c;函数式的也不难。 …

vue常用命令汇总

nvm 一个nodejs版本管理工具&#xff0c;解决node.js各种版本存在不兼容现象可以通过它可以安装和切换不同版本的node.js。 npm 可以管理 nodejs 的第三方插件。 vue-cli 是Vue提供的一个官方cli,专门为单页面应用快速搭建繁杂的脚手架。 nginx 是一个高性能的HTTP和反向代理we…

XSS(跨站攻击)

XSS漏洞&#xff08;跨站脚本&#xff09; 1.XSS 漏洞简介 ​ XSS又叫CSS&#xff08;Cross Site Script&#xff09;跨站脚本攻击是指恶意攻击者往Web页面里插入恶意Script代码&#xff0c;当用户浏览该页之时&#xff0c;嵌入其中Web里面的Script代码会被执行&#xff0c;从…

UniApp配置使用原子化tailwindcss

参考视频 创建项目 新建项目选择uniapp - vue版本这里我选择3 - 点击创建即可 创建完成后&#xff0c;如果是要编译到小程序的项目则可以先将项目运行到小程序打开了 初始化package.json 执行 npm init -y安装和配置 安装 npm i -D tailwindcss postcss autoprefixer # 安…