更新标签时泄漏

时间:2011-12-11 22:56:56

标签: python tkinter tk

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

如果有人能告诉我为什么会泄漏记忆,我会很感激。

谢谢,马特

2 个答案:

答案 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)