Wie funktioniert Destructor beim Schließen eines Tkinter -Toplevel -Widgets?
Posted: 28 Feb 2025, 05:36
Ich versuche zu verstehen, was passiert, wenn Sie ein Toplevel -Fenster schließen, insbesondere zu welchem Punkt es nicht referenziert und für die Müllsammlung berechtigt ist. Sie öffnen das Toplevel mit der Taste, schließen das Toplevel mit dem Kreuz in der Ecke und der Destruktor führt seinen Code aus. < /P>
Bedeutet dies jetzt, dass das Toplevel keinen Müll mehr sammelt und wiederholt Öffnen und Schließen des Toplevels wird Speicher verbraucht?>
Code: Select all
from tkinter import *
from tkinter import ttk
class TestClass(Toplevel):
def __init__(self, *args, **kwargs):
Toplevel.__init__(self, *args, **kwargs)
self.title('A New Window')
print ('window created')
def __del__(self):
print('destructor called')
def AButtonPress():
#create a device window
new_window = TestClass(root)
root.wait_window(new_window)
print("window closed")
root = Tk()
a_button=ttk.Button(root,text="Press Me",command=AButtonPress)
a_button.grid(column=0, row=0)
root.mainloop()
< /code>
Wenn ich jedoch Widgets zum Toplevel hinzufüge, beispielsweise ein Etikett, wird der Destruktor nicht mehr genannt. < /p>
from tkinter import *
from tkinter import ttk
class TestClass(Toplevel):
def __init__(self, *args, **kwargs):
Toplevel.__init__(self, *args, **kwargs)
self.title('A New Window')
print ('window created')
#create a widget
self.a_label=ttk.Label(self,width=15,text = "A Label")
self.a_label.grid(column=0, row=0)
def __del__(self):
print('destructor called')
def AButtonPress():
#create a toplevel object
new_window = TestClass(root)
root.wait_window(new_window)
print("window closed")
root = Tk()
a_button=ttk.Button(root,text="Press Me",command=AButtonPress)
a_button.grid(column=0, row=0)
root.mainloop()