import tkinter as tk
from tkinter import messagebox
import time
import random

class TypingTutor:
    def __init__(self, root):
        self.root = root
        self.root.title("打字练习软件")
        self.root.geometry("600x400")
        
        # 预设练习文本列表（你可以添加更多）
        self.texts = [
            "The quick brown fox jumps over the lazy dog.",
            "Python is a great programming language for beginners.",
            "Practice typing to improve your speed and accuracy.",
            "Hello world! This is a simple typing tutor app."
        ]
        
        self.target_text = ""
        self.start_time = 0
        self.user_input = ""
        
        # GUI 元素
        self.create_widgets()
        
    def create_widgets(self):
        # 标题
        title_label = tk.Label(self.root, text="打字练习", font=("Arial", 16, "bold"))
        title_label.pack(pady=10)
        
        # 目标文本显示（只读）
        self.target_label = tk.Label(self.root, text="", font=("Arial", 12), wraplength=500, justify="left", bg="lightgray", padx=10, pady=10)
        self.target_label.pack(pady=10)
        
        # 输入框
        self.input_entry = tk.Entry(self.root, font=("Arial", 12), width=60)
        self.input_entry.pack(pady=10)
        self.input_entry.bind("<KeyRelease>", self.on_type)  # 实时检查输入
        
        # 结果显示
        self.result_label = tk.Label(self.root, text="准确率: 0% | WPM: 0", font=("Arial", 10))
        self.result_label.pack(pady=5)
        
        # 按钮
        button_frame = tk.Frame(self.root)
        button_frame.pack(pady=20)
        
        start_btn = tk.Button(button_frame, text="开始新练习", command=self.start_new, bg="green", fg="white")
        start_btn.pack(side=tk.LEFT, padx=10)
        
        reset_btn = tk.Button(button_frame, text="重置", command=self.reset, bg="yellow")
        reset_btn.pack(side=tk.LEFT, padx=10)
        
        # 初始状态
        self.reset()
    
    def start_new(self):
        # 随机选择一段文本
        self.target_text = random.choice(self.texts)
        self.target_label.config(text=self.target_text)
        self.input_entry.delete(0, tk.END)
        self.input_entry.focus()
        self.start_time = time.time()  # 开始计时
        self.result_label.config(text="开始打字！")
    
    def on_type(self, event):
        # 实时更新用户输入
        self.user_input = self.input_entry.get()
        if len(self.user_input) == len(self.target_text):
            # 输入完成，计算结果
            self.calculate_results()
    
    def calculate_results(self):
        end_time = time.time()
        elapsed_time = end_time - self.start_time  # 秒
        
        # 计算准确率
        correct_chars = sum(1 for a, b in zip(self.target_text, self.user_input) if a == b)
        accuracy = (correct_chars / len(self.target_text)) * 100 if self.target_text else 0
        
        # 计算WPM（单词/分钟）：假设单词以空格分隔
        words = len(self.target_text.split())
        wpm = (words / elapsed_time) * 60 if elapsed_time > 0 else 0
        
        self.result_label.config(text=f"准确率: {accuracy:.1f}% | WPM: {wpm:.1f}")
        
        # 显示完成消息
        messagebox.showinfo("完成！", f"准确率: {accuracy:.1f}%\nWPM: {wpm:.1f}")
    
    def reset(self):
        self.target_label.config(text="点击'开始新练习'开始...")
        self.input_entry.delete(0, tk.END)
        self.result_label.config(text="准确率: 0% | WPM: 0")
        self.user_input = ""

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