import tkinter as tk
from tkinter import ttk, messagebox
import random

class RandomRollCall:
    def __init__(self, root):
        self.root = root
        self.root.title("随机点名·抽签器")
        self.root.geometry("600x450")
        self.root.resizable(False, False)

        # 名单列表
        self.name_list = []
        self.is_running = False

        # 界面布局
        # 顶部显示区
        self.show_label = tk.Label(root, text="等待抽签", font=("微软雅黑", 30), fg="#e74c3c")
        self.show_label.pack(pady=25)

        # 按钮框架
        frame_btn = tk.Frame(root)
        frame_btn.pack(pady=5)

        self.btn_start = ttk.Button(frame_btn, text="开始抽签", command=self.start_roll)
        self.btn_start.grid(row=0, column=0, padx=8)

        self.btn_stop = ttk.Button(frame_btn, text="停止", command=self.stop_roll, state="disabled")
        self.btn_stop.grid(row=0, column=1, padx=8)

        self.btn_clear = ttk.Button(frame_btn, text="清空名单", command=self.clear_list)
        self.btn_clear.grid(row=0, column=2, padx=8)

        # 添加名字区域
        frame_add = tk.Frame(root)
        frame_add.pack(pady=12)
        tk.Label(frame_add, text="输入姓名：").grid(row=0, column=0)
        self.entry_name = ttk.Entry(frame_add, width=30)
        self.entry_name.grid(row=0, column=1, padx=6)
        ttk.Button(frame_add, text="添加", command=self.add_name).grid(row=0, column=2)

        # 列表框
        tk.Label(root, text="当前抽签名单：").pack()
        self.listbox = tk.Listbox(root, width=55, height=8)
        self.listbox.pack(pady=4)
        ttk.Button(root, text="删除选中人员", command=self.del_selected).pack(pady=3)

    def add_name(self):
        name = self.entry_name.get().strip()
        if not name:
            messagebox.showwarning("提示", "请输入姓名！")
            return
        if name not in self.name_list:
            self.name_list.append(name)
            self.listbox.insert(tk.END, name)
        self.entry_name.delete(0, tk.END)

    def del_selected(self):
        sel = self.listbox.curselection()
        if sel:
            idx = sel[0]
            del self.name_list[idx]
            self.listbox.delete(idx)

    def clear_list(self):
        self.name_list.clear()
        self.listbox.delete(0, tk.END)
        self.show_label.config(text="等待抽签")

    def start_roll(self):
        if len(self.name_list) == 0:
            messagebox.showerror("错误", "名单为空，请先添加名字！")
            return
        self.is_running = True
        self.btn_start.config(state="disabled")
        self.btn_stop.config(state="normal")
        self.update_name()

    def update_name(self):
        if self.is_running:
            pick = random.choice(self.name_list)
            self.show_label.config(text=pick)
            # 循环刷新名字，实现滚动效果
            self.root.after(60, self.update_name)

    def stop_roll(self):
        self.is_running = False
        self.btn_start.config(state="normal")
        self.btn_stop.config(state="disabled")


if __name__ == "__main__":
    win = tk.Tk()
    app = RandomRollCall(win)
    win.mainloop()
