首页 > 编程语言 >Python Turtle 实现动态时钟:十二时辰与星空流星效果

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

时间:2024-12-13 22:57:54浏览次数:8  
标签:Turtle turtle 星空 Python hand start pen meteor 时钟

        在这篇文章中,我将带你通过 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.second
    minute = now.minute + sec / 60
    hour = (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) // 2
    info = 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 项目。这个程序不仅提升了编程技能,还将传统文化与技术进行了深度结合。

标签:Turtle,turtle,星空,Python,hand,start,pen,meteor,时钟
From: https://blog.csdn.net/qq_36224726/article/details/144461254

相关文章

  • Python基于Django的汽车租赁管理系统的设计与实现 01qd1
    文章目录项目介绍具体实现截图开发技术设计思路开发与测试:核心代码部分展示文章目录/协作提纲源码/演示视频获取方式项目介绍Python基于Django的汽车租赁管理系统的设计与实现01qd1具体实现截图开发技术python基于flask框架的pycharm毕业设计项目框架支......
  • 基于大数据+python技术的颈椎病预防交流与数据可视化分析平台
    目录课题项目源码功能介绍具体实现截图开发流程Scrapy爬虫框架爬虫核心代码展示论文书写大纲详细视频演示源码获取课题项目源码功能介绍基于Python大数据技术进行网络爬虫的设计,框架使用Scrapy.系统设计支持以下技术栈前端开发框架:vue.js数据库mysql版本不限......
  • MarkItDown: Python一站式文档转Markdown神器
    文章目录 MarkItDown的功能特点环境准备使用virtualenv使用pipenvMarkItDown的使用方法1.基础文件转换2.处理网络资源3.处理流式数据4.命令行使用MarkItDown高级特性1.自定义会话和模型2.自定义转换器异常处理最佳实践使用建议总结在日常开发或数据分析工作中......
  • 日期与时间(python)
    一、time模块importtime#获取时间戳(浮点数)和控制运行时间a=time.time()print(a)#睡眠三秒time.sleep(3)#获取当地时间a=time.localtime()print(a)分别使用(tm_year,tm_mon,tm_mday,tm_hour,tm_min,tm_sec,tm_wday,tm_yday,tm_isdst)print(a.tm_year)#将......
  • python 查看内网所有设备的ip
    作为一个网工我们要知道内网有多少设备连接和ip,我们可以通过python脚本简单的完成。这里我的python环境为python3.13下图是一个大概的运行成果以下是整个代码复制即用。importosimportsubprocessimportplatformimportthreadingimporttimefromconcurrent.futur......
  • python毕设 露营商城系统论文+程序
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、选题背景关于露营商城系统的研究,现有研究多集中于传统商城系统的构建与运营,或者特定商品类型商城系统的部分功能优化,如电商巨头的综合商城系统......
  • python 脚本实现监视文件变化 网工
    在某些特别的情况下一些重要文件的改变、变化我们需要进行时刻的检测importtimefromwatchdog.observersimportObserverfromwatchdog.eventsimportFileSystemEventHandler#定义一个事件处理器classWatcherHandler(FileSystemEventHandler):defon_modified......
  • C#调用Python脚本的方式(一),以PaddleOCR-GUI为例
    前言每种语言都有每种语言的优势,Python由于其强大的生态,很多任务通过调用包就可以实现,那么学会从C#项目中调用Python脚本完成任务就很重要。C#调用Python代码有多种方式,如果Python那边内容比较多,可以考虑起一个WebApi进行调用,如果只是一个简单的脚本而且不需要频繁调用,那......
  • 基于Python的日志数据可视化分析系统
    收藏关注不迷路!!......
  • C#调用Python脚本的方式(一),以PaddleOCR-GUI为例
    前言每种语言都有每种语言的优势,Python由于其强大的生态,很多任务通过调用包就可以实现,那么学会从C#项目中调用Python脚本完成任务就很重要。C#调用Python代码有多种方式,如果Python那边内容比较多,可以考虑起一个WebApi进行调用,如果只是一个简单的脚本而且不需要频繁调用,那么可以......