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
--
https://mail.python.org/mailman/listinfo/python-list