import random
import tkinter as tk
from tkinter import messagebox

# 初始名单，可手动修改
name_list = ["张三", "李四", "王五", "赵六", "孙七", "周八", "吴九", "郑十"]
used_list = []  # 存放已经点过名的人
is_rolling = False  # 是否正在滚动摇号

# 主窗口
root = tk.Tk()
root.title("全能随机点名抽签器")
root.geometry("520x320")
root.resizable(False, False)

# 文字变量
show_text = tk.StringVar(value="点击开始抽签")

# 大显示标签
display_label = tk.Label(
    root,
    textvariable=show_text,
    font=("黑体", 36),
    fg="#c8102e"
)
display_label.pack(pady=45)

# 滚动摇号动画
def roll_name():
    global is_rolling
    if not is_rolling:
        return
    temp_name = random.choice(name_list)
    show_text.set(temp_name)
    root.after(60, roll_name)

# 执行点名（不重复抽取）
def start_draw():
    global is_rolling
    if len(used_list) >= len(name_list):
        messagebox.showinfo("提示", "所有人已全部点名完毕，请重置名单！")
        return

    is_rolling = True
    roll_name()

    # 停止滚动并确定结果
    def stop_roll():
        global is_rolling
        is_rolling = False
        while True:
            pick = random.choice(name_list)
            if pick not in used_list:
                used_list.append(pick)
                show_text.set(f"✅ 抽中：{pick}")
                break

    root.after(1200, stop_roll)

# 重置已点名记录
def reset_used():
    global used_list
    used_list = []
    show_text.set("名单已重置，可以重新点名")

# 从txt文件导入名单（txt每行一个名字）
def load_txt():
    global name_list, used_list
    try:
        with open("name.txt", "r", encoding="utf-8") as f:
            data = [i.strip() for i in f if i.strip()]
        if not data:
            messagebox.showwarning("警告", "txt文件内无有效姓名")
            return
        name_list = data
        used_list = []
        show_text.set("已导入文本名单")
    except FileNotFoundError:
        messagebox.showerror("错误", "未找到 name.txt 文件，请放在程序同目录")

# 退出程序
def close_app():
    root.destroy()

# 按钮容器
frame_btn = tk.Frame(root)
frame_btn.pack(pady=10)

btn1 = tk.Button(frame_btn, text="开始抽签", command=start_draw, font=("微软雅黑",12), width=10)
btn1.grid(row=0, column=0, padx=6)

btn2 = tk.Button(frame_btn, text="重置名单", command=reset_used, font=("微软雅黑",12), width=10)
btn2.grid(row=0, column=1, padx=6)

btn3 = tk.Button(frame_btn, text="导入txt名单", command=load_txt, font=("微软雅黑",12), width=10)
btn3.grid(row=0, column=2, padx=6)

btn4 = tk.Button(root, text="退出程序", command=close_app, font=("微软雅黑",11), fg="red")
btn4.pack(pady=8)

root.mainloop()