Python Tkinter乘法表练习程序故障排查与功能完善求助
修复后的Python Tkinter乘法表练习程序
常见问题排查
原代码通常会因以下问题导致异常:
- 新窗口控件初始化不当,变量作用域混乱
- 答题次数、对错计数逻辑错误
- 缺少输入合法性验证(如非数字输入)
- 随机题目生成未绑定目标数字
- 答题完成后未做状态锁定与结果提示
完整修复代码
import tkinter as tk import tkinter.messagebox as messagebox import random class MultiplicationPractice: def __init__(self, root): self.root = root self.root.title("乘法表练习") # 主窗口布局 tk.Label(root, text="输入要练习的数字:").pack(pady=10) self.num_entry = tk.Entry(root, width=10) self.num_entry.pack(pady=5) tk.Button(root, text="开始练习", command=self.start_practice).pack(pady=10) def start_practice(self): # 输入合法性校验 try: self.target_num = int(self.num_entry.get()) if not (1 <= self.target_num <= 12): messagebox.showerror("错误", "请输入1-12之间的整数") return except ValueError: messagebox.showerror("错误", "请输入有效的数字") return # 创建练习子窗口 self.practice_win = tk.Toplevel(self.root) self.practice_win.title(f"{self.target_num}的乘法表练习") self.practice_win.resizable(False, False) # 初始化答题状态 self.total_questions = 10 self.current_q = 0 self.correct = 0 self.wrong = 0 # 练习窗口控件 self.question_label = tk.Label(self.practice_win, text="", font=("Arial", 16)) self.question_label.pack(pady=20) self.answer_entry = tk.Entry(self.practice_win, width=10, font=("Arial", 14)) self.answer_entry.pack(pady=5) self.answer_entry.bind("<Return>", self.check_answer) # 支持回车提交 tk.Button(self.practice_win, text="提交答案", command=self.check_answer).pack(pady=10) self.result_label = tk.Label(self.practice_win, text="正确:0 | 错误:0", font=("Arial", 12)) self.result_label.pack(pady=15) # 生成第一道题目 self.generate_question() def generate_question(self): # 生成1-12之间的随机乘数 self.multiplier = random.randint(1, 12) self.question_label.config(text=f"{self.target_num} × {self.multiplier} = ?") self.answer_entry.delete(0, tk.END) self.answer_entry.focus() def check_answer(self, event=None): if self.current_q >= self.total_questions: return # 验证答案输入 try: user_ans = int(self.answer_entry.get()) except ValueError: messagebox.showwarning("提示", "请输入有效的数字答案") return # 判断对错并更新计数 correct_ans = self.target_num * self.multiplier if user_ans == correct_ans: self.correct += 1 messagebox.showinfo("结果", "回答正确!") else: self.wrong += 1 messagebox.showinfo("结果", f"回答错误,正确答案是{correct_ans}") # 更新计数显示 self.result_label.config(text=f"正确:{self.correct} | 错误:{self.wrong}") self.current_q += 1 # 判断是否完成所有题目 if self.current_q < self.total_questions: self.generate_question() else: self.answer_entry.config(state=tk.DISABLED) messagebox.showinfo("练习结束", f"10道题已完成!\n正确:{self.correct} | 错误:{self.wrong}") if __name__ == "__main__": root = tk.Tk() app = MultiplicationPractice(root) root.mainloop()
代码关键说明
- 输入验证:确保用户输入1-12之间的有效整数,避免非法输入引发异常
- 窗口管理:用
Toplevel创建独立练习窗口,避免主窗口与子窗口控件冲突 - 状态维护:通过类属性统一管理答题次数、对错计数,保证状态在函数间正确传递
- 交互优化:支持回车提交答案,答题完成后锁定输入框并展示最终结果
- 随机题目:每次生成1-12之间的随机乘数,保证习题的随机性
内容的提问来源于stack exchange,提问作者Kripersi
相关产品推荐
相关产品推荐

