Tkinter long-running window freezes

Terry Reedy tjreedy at udel.edu
Wed Feb 24 11:03:30 EST 2021


On 2/24/2021 6:35 AM, John O'Hagan wrote:
> Hi list
> 
> I have a 3.9 tkinter interface that displays data from an arbitrary
> number of threads, each of which runs for an arbitrary period of time.
> A frame opens in the root window when each thread starts and closes
> when it stops. Widgets in the frame and the root window control the
> thread and how the data is displayed.
> 
> This works well for several hours, but over time the root window
> becomes unresponsive and eventually freezes and goes grey. No error
> messages are produced in the terminal.
> 
> Here is some minimal, non-threaded code that reproduces the problem on
> my system (Xfce4 on Debian testing):

I am trying this out on Windows 10, with a wider label (so I can move 
the window) and a button that changes when pressed, and a sequential 
counter.  Will report when the Window freezes, or maybe a day if not.

> from tkinter import *
> from random import randint
> 
> root = Tk()
> 
> def display(label):
>      label.destroy()
>      label = Label(text=randint(0, 9))
>      label.pack()
>      root.after(100, display, label)
> 
> display(Label())
> mainloop()

You could try with .grid instead.

> This opens a tiny window that displays a random digit on a new label
> every .1 second. (Obviously I could do this by updating the text rather
> than recreating the label, but my real application has to destroy
> widgets and create new ones).

Plus you seem to have a memory leak and may need to replicate that.

> This works for 3-4 hours, but eventually the window freezes.
> 
> The process uses about 26 Mb of memory at first, and this gradually
> increases to around 30 or so by the time it freezes.

-- 
Terry Jan Reedy



More information about the Python-list mailing list