You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tkinter标签旧内容未清除,新问题叠加显示的解决求助

乘法练习GUI标签残留问题解决方案

你的问题核心原因是重复创建标签导致全局变量被覆盖:在show_sum()函数中,每次都会新建一个l1标签并赋值给同名变量,这使得后续的清除操作(比如clear_sum()或l1.config(text=""))只对新创建的标签生效,而最初在窗口布局里的原始标签完全没被修改,因此旧问题文本会一直残留。

修改后的完整代码

import random
import tkinter as tk
from tkinter import font
from datetime import datetime

now = datetime.now()
s2 = now.strftime("%d/%m/%Y, %H:%M:%S")

questions_asked = 0
score = 0
number1 = 0
number2 = 0

def clear_text():
    e1.delete(0, 'end')

def getName():
    return e2.get()

def show_sum():
    # 直接修改已存在的l1标签文本,不再新建标签
    global number1, number2
    number1 = random.randrange(1, 12)
    number2 = random.randrange(1, 12)
    l1.config(text=f"What is {number1} x {number2}?")

def Submit():
    global questions_asked, score
    right_answer = number1 * number2
    answer = int(e1.get())
    
    if answer == right_answer:
        l2.config(text='Correct')
        score += 1
    else:
        l2.config(text=f"Not correct, the correct answer is {right_answer}")
    
    questions_asked += 1
    clear_text()
    l1.config(text="")  # 清除当前问题文本
    l3.config(text=f"Score  {score}")
    
    if questions_asked >= 20:
        name = e2.get()
        btn3.configure(state=tk.DISABLED)
        btn1.configure(state=tk.DISABLED)
        l4.config(text=f"Game Over {name.capitalize()} - You got {score} out of {questions_asked} correct")
        with open('Results.txt', "a") as f:
            f.write(f'\n{s2} , {name.capitalize()} , {score}')

window = tk.Tk()
window.title("Multiplication Practise")
window.geometry("1000x500")
window.config(bg="#A569BD")
custom_font = font.Font(size=20)

l5 = tk.Label(window, font=custom_font, text="Name")
l5.grid(column=0, row=0, padx=10, pady=30)

e2 = tk.Entry(window, font=custom_font)
e2.grid(column=1, row=0)

# 只创建一次l1标签,后续通过config更新内容
l1 = tk.Label(window, font=custom_font, text="")
l1.grid(column=0, row=1, padx=10, pady=10)

e1 = tk.Entry(window, font=custom_font)
e1.grid(column=1, row=1, padx=10, pady=10)

btn1 = tk.Button(window, font=custom_font, text="Check Answer", bg="lightgreen", command=lambda: [Submit(), show_sum()])
btn1.grid(column=2, row=1, padx=10, pady=10)

btn3 = tk.Button(window, font=custom_font, text="Submit Name", state=tk.NORMAL, bg="lightgreen", command=lambda: [show_sum(), getName()])
btn3.grid(column=2, row=0, padx=10, pady=10)

l2 = tk.Label(window, font=custom_font)
l2.grid(column=1, row=2, padx=10, pady=10)

# 分数标签
l3 = tk.Label(window, font=custom_font, text=f"Score  {score}")
l3.grid(column=0, row=3, padx=10, pady=10)

# 最终结果标签
blank = tk.PhotoImage()
l4 = tk.Label(window, image=blank, text="", font=custom_font, width=600, height=50, compound="c", bd=0, padx=0)
l4.grid(column=1, row=3, columnspan=2, padx=10, pady=10)

window.mainloop()

关键改动说明

  • 移除重复创建标签的操作:show_sum()函数不再新建l1标签,而是直接用l1.config(text=...)更新已存在标签的内容,确保所有操作都作用于同一个标签。
  • 简化全局变量管理:提前声明number1和number2为全局变量,避免函数内重复声明导致的变量作用域问题。
  • 优化代码冗余:删除了重复的clear_sum()函数,直接在需要清除标签的地方调用l1.config(text="");同时简化了Submit函数的逻辑,减少重复代码。
  • 使用f-string优化文本拼接:让代码更简洁易读,避免繁琐的字符串相加操作。
  • 改用with语句处理文件:自动管理文件资源,避免忘记关闭文件的问题。

内容的提问来源于stack exchange,提问作者Richard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 10:18:10