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

为何Tkinter中Label.config(text=string)内存泄漏,Label["text"]=string却不会?

Tkinter Label使用config()设置文本引发内存泄漏问题

在排查一个Tkinter程序的内存泄漏问题时,定位到核心原因:在高频执行的监控逻辑中反复调用Label.config(text=字符串)更新文本,会导致内存占用持续上升。

现象验证

修改了相关示例代码,加入tracemalloc观测内存变化:

  • 每次点击按钮调用my_label.config(text = my_text)时,内存占用不断攀升
  • 注释该行改用my_label["text"] = my_text,或使用textvariable绑定变量的方式,内存不再持续增长
  • 该问题在OS X、Windows、树莓派系统上均能复现

测试代码

# 导入tkinter所有组件
from tkinter import *
import tracemalloc

# 创建主窗口
Main_window = Tk()

# 待设置的文本内容
my_text = "GeeksforGeeks updated !!!"

# 更新Label文本的函数
def counter():
    global my_text
    
    # 以下两种方式二选一:config会泄漏,[]索引不会
    my_label.config(text = my_text)
    # my_label["text"] = my_text
    
    # 打印当前内存占用(单位:字节)
    print(tracemalloc.get_traced_memory()[0])

# 创建触发更新的按钮
my_button = Button(Main_window,
                   text = "点击更新",
                   command = counter)

# 创建初始Label
my_label = Label(Main_window,
                 text = "geeksforgeeks")

# 布局组件
my_label.pack()
my_button.pack()

# 启动内存追踪
tracemalloc.start()

# 启动GUI主循环
Main_window.mainloop()

临时缓解方案

该泄漏与Python垃圾回收机制相关,导入gc模块并设置内存阈值触发gc.collect()后,可将内存泄漏控制在阈值范围内。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 22:00:00