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

class WordMemorizeApp:
    def __init__(self, root):
        self.root = root
        self.root.title("英语单词背诵工具")
        self.root.geometry("600x420")
        self.root.resizable(False, False)

        # 单词库 格式：{单词:释义}
        self.word_dict = {
            "accomplish": "v. 完成，实现",
            "adequate": "adj. 足够的，适当的",
            "analyze": "v. 分析，研究",
            "approach": "v. 接近；n. 方法",
            "assess": "v. 评估，评定",
            "available": "adj. 可获得的，可用的",
            "beneficial": "adj. 有益的，有利的",
            "circumstance": "n. 情况，环境",
            "consequence": "n. 结果，后果",
            "considerable": "adj. 相当大的，重要的",
            "contribute": "v. 贡献，促成",
            "demonstrate": "v. 证明，展示",
            "efficient": "adj. 高效的，有能力的",
            "eliminate": "v. 消除，排除",
            "emphasize": "v. 强调，着重",
            "facilitate": "v. 促进，使便利",
            "fundamental": "adj. 基础的，根本的",
            "illustrate": "v. 说明，图解",
            "indicate": "v. 表明，指示",
            "investigate": "v. 调查，研究"
        }
        # 所有单词列表、已背会单词、当前单词下标
        self.all_words = list(self.word_dict.keys())
        self.mastered_words = []
        self.current_idx = 0
        self.show_mean = False  # 是否显示释义

        # 搭建界面UI
        self.create_widgets()
        self.update_word_display()

    def create_widgets(self):
        # 标题标签
        title_label = ttk.Label(self.root, text="英语单词背诵", font=("微软雅黑", 20, "bold"))
        title_label.pack(pady=15)

        # 单词显示框
        word_frame = tk.Frame(self.root, relief=tk.GROOVE, bd=2, width=520, height=120)
        word_frame.pack(pady=5)
        word_frame.pack_propagate(False)

        self.word_label = tk.Label(word_frame, text="", font=("微软雅黑", 24, "bold"), fg="#222222")
        self.word_label.pack(pady=20)

        self.mean_label = tk.Label(word_frame, text="", font=("微软雅黑", 16), fg="#0066cc")
        self.mean_label.pack()

        # 进度文字
        self.progress_label = ttk.Label(self.root, text="进度：0/0 | 已掌握：0个", font=("微软雅黑", 11))
        self.progress_label.pack(pady=8)

        # 第一排按钮
        btn_frame1 = tk.Frame(self.root)
        btn_frame1.pack(pady=6)

        ttk.Button(btn_frame1, text="上一个", command=self.prev_word, width=10).grid(row=0, column=0, padx=6)
        ttk.Button(btn_frame1, text="下一个", command=self.next_word, width=10).grid(row=0, column=1, padx=6)
        ttk.Button(btn_frame1, text="显示/隐藏释义", command=self.toggle_meaning, width=12).grid(row=0, column=2, padx=6)
        ttk.Button(btn_frame1, text="随机抽词", command=self.random_word, width=10).grid(row=0, column=3, padx=6)

        # 第二排按钮
        btn_frame2 = tk.Frame(self.root)
        btn_frame2.pack(pady=6)
        ttk.Button(btn_frame2, text="标记已掌握", command=self.mark_mastered, width=12).grid(row=0, column=0, padx=6)
        ttk.Button(btn_frame2, text="清空已掌握", command=self.clear_mastered, width=12).grid(row=0, column=1, padx=6)
        ttk.Button(btn_frame2, text="添加新单词", command=self.add_new_word, width=12).grid(row=0, column=2, padx=6)

    # 更新单词界面内容
    def update_word_display(self):
        if not self.all_words:
            self.word_label.config(text="单词库为空，请添加单词")
            self.mean_label.config(text="")
            return
        word = self.all_words[self.current_idx]
        self.word_label.config(text=word)
        # 控制释义显示隐藏
        if self.show_mean:
            self.mean_label.config(text=self.word_dict[word])
        else:
            self.mean_label.config(text="点击按钮显示释义")
        # 更新进度
        total = len(self.all_words)
        master_num = len(self.mastered_words)
        self.progress_label.config(text=f"进度：{self.current_idx+1}/{total} | 已掌握：{master_num}个")

    # 切换释义显示状态
    def toggle_meaning(self):
        self.show_mean = not self.show_mean
        self.update_word_display()

    # 上一个单词
    def prev_word(self):
        if len(self.all_words) == 0:
            return
        self.current_idx = (self.current_idx - 1) % len(self.all_words)
        self.show_mean = False
        self.update_word_display()

    # 下一个单词
    def next_word(self):
        if len(self.all_words) == 0:
            return
        self.current_idx = (self.current_idx + 1) % len(self.all_words)
        self.show_mean = False
        self.update_word_display()

    # 随机抽取单词
    def random_word(self):
        if len(self.all_words) == 0:
            messagebox.showinfo("提示", "单词列表为空！")
            return
        self.current_idx = random.randint(0, len(self.all_words)-1)
        self.show_mean = False
        self.update_word_display()

    # 标记当前单词已掌握
    def mark_mastered(self):
        current_word = self.all_words[self.current_idx]
        if current_word not in self.mastered_words:
            self.mastered_words.append(current_word)
            messagebox.showinfo("成功", f"【{current_word}】标记为已掌握！")
            self.update_word_display()
        else:
            messagebox.showwarning("提示", "该单词早已标记掌握")

    # 清空已掌握列表
    def clear_mastered(self):
        if messagebox.askyesno("确认", "确定清空所有已掌握记录吗？"):
            self.mastered_words.clear()
            self.update_word_display()
            messagebox.showinfo("完成", "已掌握列表已清空")

    # 弹窗新增单词
    def add_new_word(self):
        add_win = tk.Toplevel(self.root)
        add_win.title("新增单词")
        add_win.geometry("320x180")
        add_win.resizable(False, False)

        ttk.Label(add_win, text="英文单词：", font=("微软雅黑",11)).pack(pady=8)
        word_entry = ttk.Entry(add_win, width=30)
        word_entry.pack()

        ttk.Label(add_win, text="中文释义：", font=("微软雅黑",11)).pack(pady=8)
        mean_entry = ttk.Entry(add_win, width=30)
        mean_entry.pack()

        def save_new():
            w = word_entry.get().strip()
            m = mean_entry.get().strip()
            if w and m:
                if w not in self.word_dict:
                    self.word_dict[w] = m
                    self.all_words = list(self.word_dict.keys())
                    messagebox.showinfo("添加成功", f"单词 {w} 录入完成")
                    add_win.destroy()
                    self.update_word_display()
                else:
                    messagebox.showerror("错误", "该单词已存在！")
            else:
                messagebox.showerror("错误", "单词和释义不能为空")

        ttk.Button(add_win, text="保存添加", command=save_new).pack(pady=15)

if __name__ == "__main__":
    root = tk.Tk()
    app = WordMemorizeApp(root)
    root.mainloop()