import tkinter as tk
from tkinter import ttk
import random
import time

# 练习用的文本库
TEXT_POOL = [
    "Python是一种简单易学的编程语言",
    "坚持每天练习打字可以提高输入速度",
    "良好的习惯让学习和工作更高效",
    "代码改变世界，编程成就未来",
    "用心敲好每一个字，时间会给你答案",
    "生活就像编程，不断调试才能更完美",
    "知识需要积累，技能需要练习",
    "专注当下，认真对待每一次敲击"
]

class TypingTrainer:
    def __init__(self, root):
        self.root = root
        self.root.title("Python 打字练习软件")
        self.root.geometry("700x400")  # 窗口大小
        
        # 变量初始化
        self.current_text = ""
        self.start_time = 0
        self.is_typing = False
        
        # 创建界面组件
        self.setup_ui()

    def setup_ui(self):
        # 标题标签
        title_label = ttk.Label(self.root, text="打字练习软件", font=("微软雅黑", 20))
        title_label.pack(pady=10)

        # 显示待输入文本
        self.text_label = ttk.Label(self.root, text="", font=("微软雅黑", 16), wraplength=650)
        self.text_label.pack(pady=10)

        # 输入框
        self.input_entry = ttk.Entry(self.root, font=("微软雅黑", 14), width=60)
        self.input_entry.pack(pady=10)
        self.input_entry.bind("<KeyRelease>", self.check_text)  # 按键松开时检测

        # 统计信息区域
        self.info_frame = ttk.Frame(self.root)
        self.info_frame.pack(pady=10)

        self.time_label = ttk.Label(self.info_frame, text="用时：0 秒", font=("微软雅黑", 12))
        self.time_label.grid(row=0, column=0, padx=10)

        self.correct_label = ttk.Label(self.info_frame, text="正确：0 字", font=("微软雅黑", 12))
        self.correct_label.grid(row=0, column=1, padx=10)

        self.error_label = ttk.Label(self.info_frame, text="错误：0 字", font=("微软雅黑", 12))
        self.error_label.grid(row=0, column=2, padx=10)

        self.speed_label = ttk.Label(self.info_frame, text="速度：0 字/分钟", font=("微软雅黑", 12))
        self.speed_label.grid(row=0, column=3, padx=10)

        # 按钮区域
        self.btn_frame = ttk.Frame(self.root)
        self.btn_frame.pack(pady=15)

        self.start_btn = ttk.Button(self.btn_frame, text="开始练习", command=self.start_train)
        self.start_btn.grid(row=0, column=0, padx=10)

        self.reset_btn = ttk.Button(self.btn_frame, text="重新开始", command=self.reset_train)
        self.reset_btn.grid(row=0, column=1, padx=10)

    # 开始练习
    def start_train(self):
        self.current_text = random.choice(TEXT_POOL)
        self.text_label.config(text=self.current_text)
        self.input_entry.delete(0, tk.END)
        self.input_entry.focus()  # 聚焦输入框
        self.start_time = time.time()
        self.is_typing = True
        
        # 重置统计
        self.time_label.config(text="用时：0 秒")
        self.correct_label.config(text="正确：0 字")
        self.error_label.config(text="错误：0 字")
        self.speed_label.config(text="速度：0 字/分钟")

    # 实时检测输入
    def check_text(self, event):
        if not self.is_typing:
            return

        user_input = self.input_entry.get()
        correct = 0
        error = 0

        # 统计正确与错误
        for i, char in enumerate(user_input):
            if i < len(self.current_text) and char == self.current_text[i]:
                correct += 1
            else:
                error += 1

        # 计算用时和速度
        used_time = max(round(time.time() - self.start_time, 1), 0.1)
        speed = int(correct / (used_time / 60))

        # 更新界面显示
        self.time_label.config(text=f"用时：{used_time} 秒")
        self.correct_label.config(text=f"正确：{correct} 字")
        self.error_label.config(text=f"错误：{error} 字")
        self.speed_label.config(text=f"速度：{speed} 字/分钟")

        # 输入完成自动停止
        if user_input == self.current_text:
            self.is_typing = False

    # 重置练习
    def reset_train(self):
        self.text_label.config(text="")
        self.input_entry.delete(0, tk.END)
        self.time_label.config(text="用时：0 秒")
        self.correct_label.config(text="正确：0 字")
        self.error_label.config(text="错误：0 字")
        self.speed_label.config(text="速度：0 字/分钟")
        self.is_typing = False

# 运行程序
if __name__ == "__main__":
    root = tk.Tk()
    app = TypingTrainer(root)
    root.mainloop()