import tkinter as tk
from tkinter import messagebox, ttk
import winsound
import time
import random


class CoolTimer(tk.Tk):
    def __init__(self):
        super().__init__()
        self.title("特色大屏倒计时器（多铃声版）")
        self.geometry("800x500")
        self.resizable(0, 0)
        self.configure(bg="#1e1e2f")

        # 状态变量
        self.running = False
        self.paused = False
        self.total = 0

        # 铃声配置（多种预设铃声）
        self.ringtone_types = {
            "经典蜂鸣音": {"start": 1000, "pause": 600, "reset": 400, "countdown": 1500, "end": [2000, 1500, 2000]},
            "轻快提示音": {"start": 1200, "pause": 800, "reset": 500, "countdown": 1800, "end": [1800, 1400, 1800]},
            "沉稳低音音": {"start": 800, "pause": 500, "reset": 300, "countdown": 1200, "end": [1500, 1000, 1500]},
            "随机趣味音": {"start": None, "pause": None, "reset": None, "countdown": None, "end": None},
            "静音模式": {"start": 0, "pause": 0, "reset": 0, "countdown": 0, "end": [0, 0, 0]}
        }
        self.current_ringtone = tk.StringVar(value="经典蜂鸣音")

        # ========== 大屏时间显示 ==========
        self.lbl_time = tk.Label(
            self,
            text="00:00:00",
            font=("Impact", 80),
            bg="#1e1e2f",
            fg="#00ffcc"
        )
        self.lbl_time.pack(pady=20)

        # ========== 铃声选择区 ==========
        ring_frame = tk.Frame(self, bg="#1e1e2f")
        ring_frame.pack(pady=10)

        tk.Label(
            ring_frame,
            text="选择铃声：",
            font=("Microsoft YaHei", 14),
            bg="#1e1e2f",
            fg="white"
        ).grid(row=0, column=0, padx=10)

        # 下拉选择框
        self.ring_combobox = ttk.Combobox(
            ring_frame,
            textvariable=self.current_ringtone,
            values=list(self.ringtone_types.keys()),
            font=("Microsoft YaHei", 12),
            state="readonly",
            width=15
        )
        self.ring_combobox.grid(row=0, column=1, padx=10)

        # 试听按钮
        self.test_btn = tk.Button(
            ring_frame,
            text="试听结束铃声",
            font=("Microsoft YaHei", 12),
            bg="#3a3f5c",
            fg="white",
            relief="flat",
            command=self.test_ringtone
        )
        self.test_btn.grid(row=0, column=2, padx=10)

        # ========== 时分秒滚轮选择区 ==========
        spin_frame = tk.Frame(self, bg="#1e1e2f")
        spin_frame.pack(pady=10)

        # 小时滚轮
        self.hh = tk.Spinbox(
            spin_frame,
            from_=0,
            to=99,
            width=3,
            font=("Arial", 28),
            justify=tk.CENTER
        )
        self.hh.insert(0, "00")

        # 分钟滚轮
        self.mm = tk.Spinbox(
            spin_frame,
            from_=0,
            to=59,
            width=3,
            font=("Arial", 28),
            justify=tk.CENTER
        )
        self.mm.insert(0, "00")

        # 秒滚轮
        self.ss = tk.Spinbox(
            spin_frame,
            from_=0,
            to=59,
            width=3,
            font=("Arial", 28),
            justify=tk.CENTER
        )
        self.ss.insert(0, "00")

        # 滚轮布局
        self.hh.grid(row=0, column=0, padx=8)
        tk.Label(spin_frame, text=":", font=("Arial", 28),
                 bg="#1e1e2f", fg="white").grid(row=0, column=1)
        self.mm.grid(row=0, column=2, padx=8)
        tk.Label(spin_frame, text=":", font=("Arial", 28),
                 bg="#1e1e2f", fg="white").grid(row=0, column=3)
        self.ss.grid(row=0, column=4, padx=8)

        # ========== 功能按钮区 ==========
        btn_frame = tk.Frame(self, bg="#1e1e2f")
        btn_frame.pack(pady=20)

        # 按钮样式
        btn_style = {
            "font": ("Microsoft YaHei", 16, "bold"),
            "width": 8,
            "relief": "flat",
            "fg": "white"
        }

        # 开始按钮
        self.btn_start = tk.Button(
            btn_frame,
            text="开始",
            bg="#00c853",
            **btn_style,
            command=self.start
        )
        self.btn_start.grid(row=0, column=0, padx=12)

        # 暂停按钮
        self.btn_pause = tk.Button(
            btn_frame,
            text="暂停",
            bg="#ffab00",
            **btn_style,
            command=self.pause
        )
        self.btn_pause.grid(row=0, column=1, padx=12)

        # 重置按钮
        self.btn_reset = tk.Button(
            btn_frame,
            text="重置",
            bg="#d50000",
            **btn_style,
            command=self.reset
        )
        self.btn_reset.grid(row=0, column=2, padx=12)

    def get_ringtone_freq(self, sound_type):
        """获取当前选择铃声的频率"""
        ringtone = self.ringtone_types[self.current_ringtone.get()]
        freq = ringtone[sound_type]

        # 随机趣味音处理
        if freq is None:
            if sound_type == "end":
                return [random.randint(1000, 2000) for _ in range(3)]
            else:
                return random.randint(500, 2000)

        return freq

    def play_sound(self, freq, duration=200):
        """播放音效（频率为0时静音）"""
        if freq == 0:
            return
        try:
            winsound.Beep(freq, duration)
        except Exception:
            pass

    def test_ringtone(self):
        """试听当前选择的结束铃声"""
        end_freqs = self.get_ringtone_freq("end")
        for freq in end_freqs:
            self.play_sound(freq, 250)
            time.sleep(0.1)

    def get_seconds(self):
        """转换时分秒为总秒数"""
        try:
            h = int(self.hh.get())
            m = int(self.mm.get())
            s = int(self.ss.get())
            return h * 3600 + m * 60 + s
        except ValueError:
            return 0

    def show_time(self, sec):
        """格式化显示时间"""
        h = sec // 3600
        m = (sec % 3600) // 60
        s = sec % 60
        self.lbl_time.config(text=f"{h:02d}:{m:02d}:{s:02d}")

    def start(self):
        """开始/继续倒计时"""
        if self.paused:
            # 继续倒计时
            freq = self.get_ringtone_freq("start")
            self.play_sound(freq, 200)
            self.paused = False
            self.running = True
            self.count()
            return

        sec = self.get_seconds()
        if sec <= 0:
            messagebox.showwarning("提示", "请设置大于0的时间！")
            return

        self.total = sec
        self.show_time(self.total)
        self.running = True

        # 播放开始铃声
        freq = self.get_ringtone_freq("start")
        self.play_sound(freq, 200)

        self.count()

    def pause(self):
        """暂停倒计时"""
        if self.running:
            # 播放暂停铃声
            freq = self.get_ringtone_freq("pause")
            self.play_sound(freq, 200)

            self.running = False
            self.paused = True

    def reset(self):
        """重置倒计时"""
        # 播放重置铃声
        freq = self.get_ringtone_freq("reset")
        self.play_sound(freq, 200)

        self.running = False
        self.paused = False
        self.total = 0
        self.lbl_time.config(text="00:00:00", fg="#00ffcc")

        # 重置滚轮
        self.hh.delete(0, tk.END)
        self.hh.insert(0, "00")
        self.mm.delete(0, tk.END)
        self.mm.insert(0, "00")
        self.ss.delete(0, tk.END)
        self.ss.insert(0, "00")

    def count(self):
        """倒计时核心逻辑"""
        if not self.running:
            return

        if self.total > 0:
            self.show_time(self.total)
            self.total -= 1

            # 最后10秒提醒
            if self.total <= 10:
                self.lbl_time.config(fg="#ff3d00")
                # 播放倒计时提醒音
                freq = self.get_ringtone_freq("countdown")
                self.play_sound(freq, 100)
            else:
                self.lbl_time.config(fg="#00ffcc")

            self.after(1000, self.count)
        else:
            self.running = False
            self.lbl_time.config(fg="#00ffcc")
            # 播放结束特效铃声
            end_freqs = self.get_ringtone_freq("end")
            for freq in end_freqs:
                self.play_sound(freq, 250)
                time.sleep(0.1)
            messagebox.showinfo("完成", "时间到！🎉")


if __name__ == "__main__":
    app = CoolTimer()
    app.mainloop()   
    app.mainloop()
    app.mainloop()

r()

   
