Hi list I noticed this issue with a long-running application that displays information from a variable number of sources by opening an embedded window on a Text widget for each new source, and closing it when the source is completed. To prevent increasing memory use, the widgets inside the windows are "recycled", i.e. hidden using a tag and cached when the window is closed, to be re-used when needed. New widgets are only created when the cache is empty.
The code below demonstrates the issue by rapidly creating and hiding a window containing the same Label widget. On my machine, each create_window call initially takes < 1 ms, but a few minutes later increases to several ms. After several hours, it takes a few seconds for each operation. If the commented line removing the tag is used instead of the window_create call, there is no slowdown. Unfortunately this is not useful in the real program, which requires that new windows open in a specified position. AFAIK there is no way to move an embedded window on a Text widget other than by re-calling window_create (but I'd be glad to be wrong about that). Any insights or suggestions? ------------------------------- from time import time from tkinter import * root = Tk() button = Button(root, text='Run') text = Text(root) text.tag_config('hide', elide=True) label=Label(text, text='running') def show_and_hide(): if button['text']=='Stop': if text.tag_names(label): t = time() #this line gradually gets slower: text.window_create(END, window=label) #this line doesn't: #text.tag_remove('hide', label) print(round((time() - t) * 1000)) else: text.tag_add('hide', label) button.after(10, show_and_hide) def run(): if button['text']=='Run': button['text'] = 'Stop' text.window_create(END, window=label) show_and_hide() else: button['text'] = 'Run' text.tag_add('hide', label) button['command'] = run button.pack() text.pack() mainloop() -- https://mail.python.org/mailman3//lists/python-list.python.org