Question

Je fais une petite application avec Tkinter. Je voudrais nettoyer quelques choses dans une fonction appelée lorsque ma fenêtre est fermée. J'essaie de lier l'événement de fermeture de ma fenêtre à cette fonction. Je ne sais pas si c'est possible et quelle est la séquence correspondante.

La documentation Python dit: See the bind man page and page 201 of John Ousterhout’s book for details.

Malheureusement, je n'ai pas ces ressources entre les mains. Quelqu'un connaît-il la liste des événements pouvant être liés?

Une autre solution serait de tout nettoyer dans la __del__ de ma classe Frame. Pour une raison inconnue, il semble que cela ne s'appelle jamais. Quelqu'un sait-il quelle peut être la cause? Des dépendances circulaires?

Dès que j'ajoute un contrôle (décommentez dans le code ci-dessous), le <=> n'est plus appelé. Une solution à ce problème?

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()
Était-ce utile?

La solution

Je crois que c'est la page de manuel de liaison que vous pouvez avoir. été à la recherche; Je crois que l'événement que vous essayez de lier est Destroy. __del__ ne doit pas être invoqué (il est trop difficile de savoir quand une boucle de référence circulaire, par exemple un widget parent à enfant et le retour, l'arrêtera de se déclencher!), l'utilisation de la liaison d'événement est définitivement préférable.

Autres conseils

La page de manuel de bind est une ressource plus ou moins définitive pour les événements. pour Tk . Je ne comprends pas très bien ce que vous voulez faire, mais la liaison sur "<Destroy>" est probablement l’événement que vous recherchez. Que ce soit ce dont vous avez vraiment besoin, je ne sais pas.

 ...
 self.bind("<Destroy>", self.callback)
 ...
 def callback(self, event):
     print("callback called")
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top