Domanda

Sto facendo una piccola domanda con Tkinter. Vorrei pulire alcune cose in una funzione chiamata quando la mia finestra è chiusa. Sto cercando di associare l'evento di chiusura della mia finestra con quella funzione. Non so se sia possibile e qual è la sequenza corrispondente.

La documentazione di Python dice: See the bind man page and page 201 of John Ousterhout’s book for details.

Sfortunatamente, non ho queste risorse tra le mani. Qualcuno conosce l'elenco degli eventi che possono essere associati?

Una soluzione alternativa sarebbe quella di pulire tutto nella __del__ della mia classe Frame. Per una ragione sconosciuta sembra che non venga mai chiamato. Qualcuno sa quale può essere la causa? Alcune dipendenze circolari?

Non appena aggiungo un controllo (non commentato nel codice seguente), <=> non viene più chiamato. Qualche soluzione per quel problema?

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()
È stato utile?

Soluzione

Credo che this è la pagina man del bind che potresti avere stato alla ricerca; Credo che l'evento che stai cercando di associare sia Destroy. __del__ non si deve fare affidamento (troppo difficile sapere quando un loop di riferimento circolare, ad esempio widget padre e figlio e ritorno, impedirà l'attivazione!), è sicuramente preferibile utilizzare l'associazione di eventi.

Altri suggerimenti

Una risorsa più o meno definitiva per gli eventi è la man page di bind per Tk . Non sono esattamente chiaro cosa tu voglia fare, ma probabilmente il legame con "<Destroy>" è probabilmente l'evento che stai cercando. Se fa quello che ti serve davvero, non lo so.

 ...
 self.bind("<Destroy>", self.callback)
 ...
 def callback(self, event):
     print("callback called")
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top