IT评测·应用市场-qidao123.com

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

作者: 一给    时间: 2025-1-2 19:21
标题: 打造个性化跨年时钟:整点报时与祝福语、背景音乐播放的完美联合
打造个性化跨年时钟:整点报时与祝福语、背景音乐播放的完美联合

弁言

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

这款跨年时钟具备以下重要功能:
技术实现

环境准备

首先,确保安装了所需的库:
  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企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/) Powered by Discuz! X3.4