import sqlite3 import random import tkinter as tk from tkinter import Toplevel # 数据库连接与初始化 def init_db_connection(): conn = sqlite3.connect('word_database.db') cursor = conn.cursor() cursor.execute('CREATE TABLE IF NOT EXISTS Words (word TEXT, meaning TEXT, learned INTEGER)') conn.commit() return conn # 获取未学习的单词 def get_unlearned_word(conn): cursor = conn.cursor() cursor.execute('SELECT word, meaning FROM Words WHERE learned = 0 ORDER BY RANDOM() LIMIT 1') result = cursor.fetchone() if result: return {'word': result[0], 'meaning': result[1]} return None # 标记单词为已学习 def mark_learned(word, conn): cursor = conn.cursor() cursor.execute('UPDATE Words SET learned = 1 WHERE word = ?', (word,)) conn.commit() # 初始化主窗口 root = tk.Tk() root.title("单词学习系统") def open_new_window1(conn): new_window = Toplevel(root) new_window.title("新单词") def learn_next_word(): word = get_unlearned_word(conn) if word: label_word.config(text=word['word']) label_meaning.config(text=word['meaning']) current_word = word['word'] else: tk.messagebox.showinfo("提示", "没有更多新单词了!") def review_previous(): # 实现回顾逻辑(这里简化处理,实际可能需要维护一个历史单词队列) pass current_word = get_unlearned_word(conn) if current_word: label_word = tk.Label(new_window, text=current_word['word']) label_word.pack() label_meaning = tk.Label(new_window, text=current_word['meaning']) label_meaning.pack() button_next = tk.Button(new_window, text="下一个单词", command=learn_next_word) button_next.pack() button_review = tk.Button(new_window, text="回顾", command=review_previous) button_review.pack() else: tk.messagebox.showinfo("提示", "没有新单词!") def open_new_window2(conn): new_window = Toplevel(root) new_window.title("复习单词") def open_new_window3(conn): new_window = Toplevel(root) new_window.title("易错单词") # 同样,易错单词窗口逻辑需根据错误记录定制,这里简化处理 pass button1 = tk.Button(root, text="学习新单词", command=lambda: open_new_window1(init_db_connection())) button1.pack(pady=10) button2 = tk.Button(root, text="复习单词", command=lambda: open_new_window2(init_db_connection())) button2.pack(pady=10) button3 = tk.Button(root, text="易错单词", command=lambda: open_new_window3(init_db_connection())) button3.pack(pady=10) root.mainloop()