Ich mache eine kleine Anwendung mit Tkinter. Ich würde gerne einige Dinge in einer Funktion reinigen, die aufgerufen wird, wenn mein Fenster geschlossen ist. Ich versuche, das schließen Ereignis meines Fensters mit dieser Funktion zu binden. Ich weiß nicht, ob es möglich ist und was die entsprechende Sequenz ist.Welche Ereignisse können an einen Tkinter Frame gebunden werden?
Die Python-Dokumentation sagt: See the bind man page and page 201 of John Ousterhout’s book for details
.
Leider habe ich diese Ressourcen nicht in meinen Händen. Kennt jemand die Liste der Ereignisse, die gebunden werden können?
Eine alternative Lösung wäre, alles in der __del__
meiner Frame-Klasse zu reinigen. Aus einem unbekannten Grund scheint es, dass es nie aufgerufen wird. Weiß jemand, was die Ursache sein kann? Einige zirkuläre Abhängigkeiten?
Sobald ich ein Steuerelement (Kommentar im Code unten) hinzufügen, wird __del__
nicht mehr aufgerufen. Irgendeine Lösung für dieses Problem?
from tkinter import *
class MyDialog(Frame):
def __init__(self):
print("hello")
self.root = Tk()
self.root.title("Test")
Frame.__init__(self, self.root)
self.list = Listbox(self, selectmode=BROWSE)
self.list.pack(fill=BOTH, expand=1)
self.pack(fill=BOTH, expand=1)
def __del__(self):
print("bye-bye")
dialog = MyDialog()
dialog.root.mainloop()
Es funktioniert perfekt. Vielen Dank. Ich stimme zu, dass der Zirkelschluss ein Albtraum ist. – luc
Ich denke, das wäre eine bessere Antwort, wenn der Link auf die Manpage nicht auf einen persönlichen Account bei Princeton verweisen würde. Bei tcl.tk/man gibt es eine offizielle Reihe von Manpages. –
@Bryan guter Punkt, änderte die URL entsprechend, TX. –