Как Tkinter обрабатывает дочерние виджеты, когда родительский элемент уничтожен / лишен защиты? - PullRequest
0 голосов
/ 06 августа 2020

Мне интересно, что здесь происходит. Когда я запускаю эту программу, я замечаю, что память из класса TestFrame (200 МБ или около того) все еще используется даже после того, как я уничтожил ее и удалил все ссылки на нее.

import tkinter as tk
import tkinter.ttk as ttk

class TestFrame(ttk.Frame):

def __init__(self, master):
    super().__init__(master)
    self.bigDictionary = {'Hello World' + str(num): 'Hello World' + str(num) for num in range(1000000)}
    self.testLabel = ttk.Label(self, text='This is a test Label')
    self.testLabel.grid()

root = tk.Tk()
testFrame = TestFrame(root)
testFrame.grid()
testFrame.destroy()
testFrame = ''
root.mainloop()

Затем я удалил метка не является атрибутом, например:

def __init__(self, master):
    super().__init__(master)
    self.bigDictionary = {'Hello World' + str(num): 'Hello World' + str(num) for num in range(1000000)}
    testLabel = ttk.Label(self, text='This is a test Label')
    testLabel.grid()

Когда я запускал этот код, я заметил, что Python больше не удерживает память от фрейма вокруг. Может ли кто-нибудь дать некоторое представление о том, что здесь происходит?

...