2015-07-08 3 views
1

Я новичок в Python. Эта программа создает метку внутри окна Tk(). Слово «привет» записывается на этикетке неограниченно. Как я могу удалить старые привет, все еще записывая новые на неопределенный срок? Это даже то, как я останавливаю утечку памяти? Вот код:Ищете способ остановить утечку памяти в этой базовой программе

from tkinter import * 

def box(a): 
    z=Label(root,text='%s'%(a)) 
    z.place(width=50,height=20) 

def start(root): 
    a="hi" 
    box(a) 
    root.after(100, start, root) 

root = Tk() 
start(root) 
root.mainloop() 

ответ

3

Как насчет просто заменить текст вместо создания Label объект каждый раз.

from tkinter import * 

def box(a): 
    z['text'] = a 

def start(root): 
    box('hi') 
    root.after(100, start, root) 

root = Tk() 
z = Label(root, text='') 
z.place(width=50, height=20) 
start(root) 
root.mainloop() 

from tkinter import * 


def start(root, z): 
    a = 'hi' 
    z['text'] = a 
    root.after(100, start, root, z) 


root = Tk() 
z = Label(root, text='') 
z.place(width=50, height=20) 

start(root, z) 

root.mainloop() 
+0

Это, безусловно, зафиксировали утечку памяти, но теперь использование pythonw процессора пики до 50% !! С моим кодом он начнется примерно на 2% и будет медленно увеличиваться по мере утечки памяти. – JohnW4

+0

@ JohnW4, Замените '1' на' 100'. Я изменил значение от 100 до 1, чтобы проверить его. Теперь я обновил ответ, чтобы изменить «1» на «100». – falsetru

+0

О, хорошо, я должен был заметить это ... – JohnW4

Смежные вопросы