我是tkinter的新手,并且在我正在编写代码的时钟中跟踪了一个内存泄漏。事实证明更新标签时会发生内存泄漏,我在代码中得到的最简单的例子是:
import Tkinter as tk
class Display:
def __init__(self, master):
self.master = master
self.tick()
def tick(self):
self.label = tk.Label(self.master, text = 'a')
self.label.place(x=0,y=0)
self.master.after(50, self.tick)
root = tk.Tk()
disp = Display(root)
如果有人能告诉我为什么会泄漏记忆,我会很感激。
谢谢,马特
答案 0 :(得分:4)
问题是tick
不断创建新标签。除非你确实需要越来越多的标签,否则没有理由在这样的循环中创建多个标签。您可以使用configure
方法更新标签小部件的文本。
例如:
def tick(self):
self.label.configure(text=`my new text`)
self.after(50, self.tick)
答案 1 :(得分:0)
问题似乎是您在不破坏标签的情况下创建标签。每次创建新标签并将其放在旧标签上时,它仍然被引用,因此无法进行垃圾回收。
这是一个略有修改的版本,不泄漏......
import Tkinter as tk
class Display:
def __init__(self, master):
self.label = None
self.master = master
self.tick()
def tick(self):
if self.label:
self.label.destroy()
self.label = tk.Label(self.master, text = 'a')
self.label.place(x=0,y=0)
self.master.after(50, self.tick)
root = tk.Tk()
disp = Display(root)