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

打印 上一主题 下一主题

主题 994|帖子 994|积分 2982

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

弁言

随着2025新年的临近,每个人都在等待着新的开始。为了给各人带来更加个性化的体验,我开发了一款独特的跨年时钟应用程序。这款时钟不但可以或许表现当前时间,还能根据不同的时间段主动调整背景颜色,并在特定的时间播放祝福语音。本文将具体先容怎样使用Python和Tkinter库实现这一功能。
功能概述

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

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

环境准备

首先,确保安装了所需的库:
  1. pip install pytz pygame
复制代码
代码解析

导入须要的库

  1. import tkinter as tk
  2. from tkinter import Canvas
  3. import datetime
  4. import time
  5. import math
  6. import pytz
  7. import pygame  # 用于播放声音
  8. import threading  # 用于多线程
  9. import random  # 用于随机选择颜色
复制代码
设置时区和颜色列表

  1. timezone = pytz.timezone('Asia/Shanghai')  # 这里可以改为任何你想要的时区
  2. color_lst = ["white", "green", "blue", "yellow", "red", "orange"]
  3. last_color_change_time = time.time()
  4. current_color = random.choice(color_lst)
  5. lock = threading.Lock()
复制代码
获取当前时间

  1. def get_time():
  2.     """获取当前时区的时间"""
  3.     now = datetime.datetime.now(timezone)
  4.     return now.hour, now.minute, now.second
复制代码
根据时间设置背景颜色

  1. def white_black(h):
  2.     if 6 <= h < 17:  # 白天(早上6:00到晚上6:00)
  3.         return 'white'
  4.     else:  # 夜晚
  5.         return 'purple'   # 平时是黑色的,今天特殊节日改成紫色
复制代码
绘制时钟

  1. def draw_clock(canvas):
  2.     global last_color_change_time, current_color, bg_color
  3.     canvas.delete("all")  # 清除画布
  4.     h, m, s = get_time()
  5.     with lock:
  6.         if time.time() - last_color_change_time >= random.randint(6, 15):
  7.             current_color = random.choice(color_lst)
  8.             last_color_change_time = time.time()
  9.     bg_color = white_black(h)
  10.     canvas.create_oval(75, 75, 525, 525, width=18, outline=current_color, fill=bg_color)
  11.     for i in range(60):
  12.         angle = math.pi / 30 * i - math.pi / 2
  13.         x1 = 300 + 210 * math.cos(angle)
  14.         y1 = 300 + 210 * math.sin(angle)
  15.         if i % 5 == 0:
  16.             x2 = 300 + 180 * math.cos(angle)
  17.             y2 = 300 + 180 * math.sin(angle)
  18.             text_x = 300 + 150 * math.cos(angle)
  19.             text_y = 300 + 150 * math.sin(angle)
  20.             canvas.create_text(text_x, text_y, text=str(i // 5 or 12), font=("Arial", 30), fill='black' if bg_color == 'white' else 'white')
  21.         else:
  22.             x2 = 300 + 195 * math.cos(angle)
  23.             y2 = 300 + 195 * math.sin(angle)
  24.         canvas.create_line(x1, y1, x2, y2, fill='black' if bg_color == 'white' else 'white')
  25.     hour_angle = (h % 12) * 30 + m / 2 - 90
  26.     hx = 300 + 105 * math.cos(math.radians(hour_angle))
  27.     hy = 300 + 105 * math.sin(math.radians(hour_angle))
  28.     canvas.create_line(300, 300, hx, hy, fill='blue', width=9)
  29.     minute_angle = (m * 6) - 90
  30.     mx = 300 + 150 * math.cos(math.radians(minute_angle))
  31.     my = 300 + 150 * math.sin(math.radians(minute_angle))
  32.     canvas.create_line(300, 300, mx, my, fill='blue', width=6)
  33.     second_angle = (s * 6) - 90
  34.     sx = 300 + 180 * math.cos(math.radians(second_angle))
  35.     sy = 300 + 180 * math.sin(math.radians(second_angle))
  36.     canvas.create_line(300, 300, sx, sy, fill="yellow", width=3)
  37.     canvas.create_oval(292, 292, 312, 312, fill='white', outline='black')
  38.     if h == 0 and m >= 0 and s >= 0:
  39.         text_x = 300
  40.         text_y = 230
  41.         canvas.create_text(text_x, text_y, text="元旦 快乐", font=("Arial", 36, "bold"), fill='yellow')
  42.     if h == 0 and m >= 0 and s >= 1 and s <= 3:
  43.         play_sound('/Users/liuxiaowei/Downloads/元旦快乐.mp3', 1) # 用AI生成
复制代码
播放声音

  1. def play_sound(file_path, times):
  2.     try:
  3.         pygame.mixer.init()
  4.         sound = pygame.mixer.Sound(file_path)
  5.         for _ in range(times):
  6.             sound.play()
  7.             time.sleep(sound.get_length())
  8.     except Exception as e:
  9.         print(f"Error playing sound: {e}")
复制代码
更新时钟

  1. def update_clock():
  2.     draw_clock(canvas)
  3.     h, m, s = get_time()
  4.     if m == 0 and s == 0:
  5.         threading.Thread(target=play_sound, args=("../chime.wav", h % 12 or 12)).start()
  6.     elif m == 30 and s == 0:
  7.         threading.Thread(target=play_sound, args=("../chime.wav", 1)).start()
  8.     root.after(1000, update_clock)
复制代码
创建主窗口

  1. root = tk.Tk()
  2. if datetime.datetime.now().year == 2025: # 判断年份为2025,窗口标题更改为2025
  3.     year1 = '20'
  4.     year2 = '25'
  5.     root.title(f"^  {year1} ⏰ {year2}  ^")
  6. root.attributes('-topmost', True)
  7. root.resizable(True, True)
  8. canvas = Canvas(root, width=600, height=600, highlightthickness=0)
  9. canvas.pack()
  10. update_clock()
  11. root.mainloop()
复制代码
运行结果


播放背景音乐源码

  1. import os
  2. import time
  3. from datetime import datetime
  4. # 设置目标时间
  5. target_time = "00:00:02"  # 例如:下午2:30
  6. # 定义播放音乐的函数
  7. def play_music(song_name):
  8.     os.system(f"""osascript -e 'tell application "Music" to play "{song_name}"' """)
  9. # 主循环,检查当前时间
  10. while True:
  11.     current_time = datetime.now().strftime("%H:%M:%S")
  12.     if current_time == target_time:
  13.         play_music("/Users/liuxiaowei/Downloads/上海滩叶丽仪.mp3")  # 替换为实际的歌曲名称
  14.         break
  15.     time.sleep(1)  # 每分钟检查一次
复制代码
总结

通过上述代码,我们成功实现了一个功能丰富的跨年时钟。它不但可以或许在特定时间播放祝福语音,还可以或许根据时间和环境主动调整背景颜色和指针颜色,增加了用户体验的意见意义性和个性化。渴望这个项目能为各人的新年增加一份特别的惊喜和温馨。
欢迎点赞、关注、转发、收藏!!!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

一给

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表