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

为何该循环每次迭代都会创建新的Entry组件而非仅刷新内容?

解决Tkinter每次循环新建Entry组件的问题

嘿,我一眼就看出问题啦!你这段代码的核心问题是每次调用task()函数时,都会新建一个Entry组件并把它打包到窗口里,所以运行一会儿窗口就会被一堆重复的输入框占满,完全不是刷新内容的正确姿势。

问题出在哪?

看你这段代码:

from tkinter import *
import psutil

def task():
    e = Entry(root)  # 每次调用都新建一个Entry!
    e.pack()         # 每次都把新Entry加到窗口里
    e.delete(0, END)
    e.insert(0,psutil.cpu_percent(interval=None))
    s = e.get()
    root.after(500, task) 

root = Tk()
root.after(500, task)
root.mainloop()

e = Entry(root)和e.pack()这两行放在task()里,就意味着每0.5秒就会诞生一个新的输入框,而不是更新已有输入框的内容。

正确的做法:只创建一次Entry,重复更新内容

我们只需要把Entry组件的创建和打包逻辑放到task()外面,让它只执行一次,然后在task()里只做内容更新的操作就好:

from tkinter import *
import psutil

def task():
    # 直接操作已有的entry组件,更新内容
    entry.delete(0, END)
    entry.insert(0, psutil.cpu_percent(interval=None))
    # 0.5秒后再次调用task,实现循环刷新
    root.after(500, task) 

root = Tk()
# 只创建一次Entry组件并打包到窗口
entry = Entry(root)
entry.pack()

# 启动首次任务
root.after(500, task)
root.mainloop()

为什么这样可行?

  • 我们在全局作用域创建了唯一的entry对象,窗口里只会有这一个输入框。
  • task()函数里只负责清空输入框内容、插入新的CPU使用率数据,然后重新调度下一次更新,完全不会新建组件。

这样运行起来,窗口里就只有一个输入框,它会每隔0.5秒自动刷新显示当前的CPU使用率啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:03:09