打造个性化跨年时钟:整点报时与祝福语、背景音乐播放的完美结合

简介: 这款跨年时钟应用程序为2025新年特别设计,基于Python和Tkinter库开发。它不仅实时显示当前时间,还根据时间段自动调整背景颜色(白天白色、夜晚紫色),并在特定时间播放报时和祝福语音。指针颜色每隔6到15秒随机变化,增加趣味性。元旦前三秒显示“元旦快乐”并播放AI生成的祝福语音。窗口始终置顶,方便查看。此外,整点和半点时播放报时声音,背景音乐在指定时间启动,带来个性化体验。代码实现包括环境准备、时区设置、动态背景和指针绘制、声音播放及主窗口创建等功能模块。通过多线程技术确保流畅运行。希望这款时钟能为新年增添温馨与惊喜。欢迎点赞、关注、转发、收藏!

打造个性化跨年时钟:整点报时与祝福语、背景音乐播放的完美结合

引言

随着2025新年的临近,每个人都在期待着新的开始。为了给大家带来更加个性化的体验,我开发了一款独特的跨年时钟应用程序。这款时钟不仅能够显示当前时间,还能根据不同的时间段自动调整背景颜色,并在特定的时间播放祝福语音。本文将详细介绍如何使用Python和Tkinter库实现这一功能。

功能概述

这款跨年时钟具备以下主要功能:

  1. 实时显示当前时间:时钟会根据用户的本地时区(如上海)显示当前时间。
  2. 动态背景颜色变化:白天(6:00-17:00)背景为白色,夜晚为黑色(但是今天是特殊日子换成紫色),增加视觉上的舒适感。
  3. 随机指针颜色变化:每隔6到15秒,指针颜色会随机变化,增加趣味性。
  4. 整点报时:每小时整点或半点时,播放一段报时声音。
  5. 元旦祝福:在新年第一天的前三秒内,显示“元旦快乐”并播放祝福语音。(用AI生成)
  6. 窗口始终置顶:确保时钟始终处于屏幕最前端,方便查看。
  7. 背景音乐:在报时程序开始第2秒开始运行,是另一个py程序里播放。

技术实现

环境准备

首先,确保安装了所需的库:

pip install pytz pygame

代码解析

导入必要的库

import tkinter as tk
from tkinter import Canvas
import datetime
import time
import math
import pytz
import pygame  # 用于播放声音
import threading  # 用于多线程
import random  # 用于随机选择颜色

设置时区和颜色列表

timezone = pytz.timezone('Asia/Shanghai')  # 这里可以改为任何你想要的时区
color_lst = ["white", "green", "blue", "yellow", "red", "orange"]
last_color_change_time = time.time()
current_color = random.choice(color_lst)
lock = threading.Lock()

获取当前时间

def get_time():
    """获取当前时区的时间"""
    now = datetime.datetime.now(timezone)
    return now.hour, now.minute, now.second

根据时间设置背景颜色

def white_black(h):
    if 6 <= h < 17:  # 白天(早上6:00到晚上6:00)
        return 'white'
    else:  # 夜晚
        return 'purple'   # 平时是黑色的,今天特殊节日改成紫色

绘制时钟

def draw_clock(canvas):
    global last_color_change_time, current_color, bg_color

    canvas.delete("all")  # 清除画布

    h, m, s = get_time()

    with lock:
        if time.time() - last_color_change_time >= random.randint(6, 15):
            current_color = random.choice(color_lst)
            last_color_change_time = time.time()

    bg_color = white_black(h)

    canvas.create_oval(75, 75, 525, 525, width=18, outline=current_color, fill=bg_color)

    for i in range(60):
        angle = math.pi / 30 * i - math.pi / 2
        x1 = 300 + 210 * math.cos(angle)
        y1 = 300 + 210 * math.sin(angle)
        if i % 5 == 0:
            x2 = 300 + 180 * math.cos(angle)
            y2 = 300 + 180 * math.sin(angle)
            text_x = 300 + 150 * math.cos(angle)
            text_y = 300 + 150 * math.sin(angle)
            canvas.create_text(text_x, text_y, text=str(i // 5 or 12), font=("Arial", 30), fill='black' if bg_color == 'white' else 'white')
        else:
            x2 = 300 + 195 * math.cos(angle)
            y2 = 300 + 195 * math.sin(angle)
        canvas.create_line(x1, y1, x2, y2, fill='black' if bg_color == 'white' else 'white')

    hour_angle = (h % 12) * 30 + m / 2 - 90
    hx = 300 + 105 * math.cos(math.radians(hour_angle))
    hy = 300 + 105 * math.sin(math.radians(hour_angle))
    canvas.create_line(300, 300, hx, hy, fill='blue', width=9)

    minute_angle = (m * 6) - 90
    mx = 300 + 150 * math.cos(math.radians(minute_angle))
    my = 300 + 150 * math.sin(math.radians(minute_angle))
    canvas.create_line(300, 300, mx, my, fill='blue', width=6)

    second_angle = (s * 6) - 90
    sx = 300 + 180 * math.cos(math.radians(second_angle))
    sy = 300 + 180 * math.sin(math.radians(second_angle))
    canvas.create_line(300, 300, sx, sy, fill="yellow", width=3)

    canvas.create_oval(292, 292, 312, 312, fill='white', outline='black')

    if h == 0 and m >= 0 and s >= 0:
        text_x = 300
        text_y = 230
        canvas.create_text(text_x, text_y, text="元旦 快乐", font=("Arial", 36, "bold"), fill='yellow')

    if h == 0 and m >= 0 and s >= 1 and s <= 3:
        play_sound('/Users/liuxiaowei/Downloads/元旦快乐.mp3', 1) # 用AI生成

播放声音

def play_sound(file_path, times):
    try:
        pygame.mixer.init()
        sound = pygame.mixer.Sound(file_path)
        for _ in range(times):
            sound.play()
            time.sleep(sound.get_length())
    except Exception as e:
        print(f"Error playing sound: {e}")

更新时钟

def update_clock():
    draw_clock(canvas)
    h, m, s = get_time()

    if m == 0 and s == 0:
        threading.Thread(target=play_sound, args=("../chime.wav", h % 12 or 12)).start()

    elif m == 30 and s == 0:
        threading.Thread(target=play_sound, args=("../chime.wav", 1)).start()

    root.after(1000, update_clock)

创建主窗口

root = tk.Tk()
if datetime.datetime.now().year == 2025: # 判断年份为2025,窗口标题更改为2025
    year1 = '20'
    year2 = '25'
    root.title(f"^  {year1} ⏰ {year2}  ^")
root.attributes('-topmost', True)
root.resizable(True, True)
canvas = Canvas(root, width=600, height=600, highlightthickness=0)
canvas.pack()
update_clock()
root.mainloop()

运行效果

mnggiflab-compressed-录屏2024-12-31 23.gif

播放背景音乐源码

import os
import time
from datetime import datetime

# 设置目标时间
target_time = "00:00:02"  # 例如:下午2:30

# 定义播放音乐的函数
def play_music(song_name):
    os.system(f"""osascript -e 'tell application "Music" to play "{song_name}"' """)

# 主循环,检查当前时间
while True:
    current_time = datetime.now().strftime("%H:%M:%S")
    if current_time == target_time:
        play_music("/Users/liuxiaowei/Downloads/上海滩叶丽仪.mp3")  # 替换为实际的歌曲名称
        break
    time.sleep(1)  # 每分钟检查一次

总结

通过上述代码,我们成功实现了一个功能丰富的跨年时钟。它不仅能够在特定时间播放祝福语音,还能够根据时间和环境自动调整背景颜色和指针颜色,增加了用户体验的趣味性和个性化。希望这个项目能为大家的新年增添一份特别的惊喜和温馨。

欢迎点赞、关注、转发、收藏!!!

相关文章
|
前端开发 测试技术 API
国产 API 管理工具大比拼:Apifox 能否挑战 Postman?
在软件开发中,API 测试与管理工具至关重要。Postman 虽广受欢迎,但在国内常面临下载慢、注册难、功能收费等问题。Apifox 作为国产优秀替代工具,凭借简洁的界面、多功能集成、本地化服务等优势,逐渐成为开发团队的新选择。它支持接口设计、文档生成、Mock 服务、自动化测试等功能,提升团队协作效率,降低使用门槛,助力国内开发者实现高效开发与持续集成。
|
供应链 JavaScript 测试技术
硬件产品研发管理工具实战指南
本文深入剖析硬件研发中的三大核心挑战:需求传递失真、BOM管理混乱与测试验证低效,并结合学术研究与实战案例,提出可落地的解决方案框架。通过“需求穿透管理”、“BOM智能管控”和“测试自动化闭环”等方法,帮助企业提升研发效率与产品质量。同时推荐多款实用工具,并提供三步启动升级路径,助力硬件团队实现管理升级,降低项目风险,提升交付质量。
|
11月前
|
机器学习/深度学习 人工智能 算法
基于深度学习的摔倒检测系统
针对人口老龄化背景下老年人摔倒问题突出,传统检测方法存在佩戴不便、隐私泄露等局限,本研究基于深度学习技术,利用YOLOv8模型与Python开发非接触式摔倒检测系统。通过高效算法与高质量数据集实现精准识别,具备实时性高、适应性强等优势,可广泛应用于家庭、社区及医疗机构,有效提升老年人安全监护水平,减轻照护负担,推动人工智能在智慧医疗领域的融合应用。
快手私信群发工具,自动批量发送私信脚本插件,导入ID自动关注收藏点赞
这是一款快手自动化营销工具源码,支持精准私信、关注与互动。通过模拟点击和消息发送,可实现全自动打招呼功能
|
机器学习/深度学习 存储 缓存
Chonkie:面向大语言模型的轻量级文本分块处理库
Chonkie是一个专为大语言模型(LLM)应用场景设计的轻量级文本分块处理库,提供高效的文本分割和管理解决方案。该库采用最小依赖设计理念,特别适用于现实世界的自然语言处理管道。本文将详细介绍Chonkie的核心功能、设计理念以及五种主要的文本分块策略。
803 0
Chonkie:面向大语言模型的轻量级文本分块处理库
|
存储 JSON API
文本存储免费API接口教程
接口盒子提供免费文本存储服务,支持1000条记录,每条最多5000字符,适用于公告、日志、配置等场景,支持修改与读取。
473 0
|
人工智能 监控 前端开发
AI工具:前端与后端的终极对决?谁将成为新时代的宠儿?
深入探讨AI工具对前端和后端开发的具体影响、各自的机遇与挑战,并分析未来开发者如何驾驭AI,实现能力跃迁。
936 0
|
编解码 网络协议 Java
netty有什么优势
Netty 是一个异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。它的主要特点包括:开发门槛低, 定制能力强 ,高性能,活跃的社区.
|
JavaScript 搜索推荐
js 混合排序(同时存在数字、字母、汉字等)
js 混合排序(同时存在数字、字母、汉字等)
1413 0
|
安全 Shell Linux
记录VulnHub 靶场——Escalate_Linux渗透测试过程
本文档描述了一次靶场环境的搭建和渗透测试过程。首先,提供了靶机环境的下载链接,并建议在VMware或VirtualBox中以NAT模式或仅主机模式导入。接着,通过Kali Linux扫描发现靶机IP,并用Nmap扫描开放端口,识别出80、111、139、445、2049等端口。在80端口上找到一个shell.php文件,通过它发现可以利用GET参数传递cmd命令。
1279 0