更新标签有泄漏



我是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)

如果有人能告诉我为什么这泄漏内存,我会很感激。

谢谢,马特

问题是tick不断创建新标签。没有理由在这样的循环中创建多个标签,除非您确实需要不断增加标签的数量。可以使用configure方法更新标签小部件的文本。

例如:

def tick(self):
    self.label.configure(text=`my new text`)
    self.after(50, self.tick)

问题似乎是您正在创建标签而没有破坏它们。每次创建新标签并将其放在旧标签上时,它仍然被引用,因此不能被垃圾收集。

这是一个稍微修改的版本,不会泄漏....

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)

最新更新