Python Tkinter, comprobar si la raíz ha sido destruida?

Estoy escribiendo una aplicación utilizando Tkinter junto con subprocesos.

El problema que tengo es que, después de cerrar la aplicación principal, todavía se está ejecutando un subproceso y necesito una forma de comprobar si la ventana raíz se ha destruido para evitar el TclError: can't invoke "wm" command .

Todos los métodos que conozco: wminfo_exists() y state() todos devuelven un error una vez que se destruye la raíz.

Agregaré mi solución para esto, en caso de que alguien se encuentre con el mismo problema. Yo estaba siguiendo la sugerencia de aquí . Intercepto el evento de cierre de Windows para establecer mi marca que marca la root que ya está muerta, y verifico esa bandera cuando la necesito.

 exitFlag = False def thread_method(): global root, exitFlag if not exitFlag: // execute the code relate to root def on_quit(): global exitFlag exitFlag = True root.destroy() root.protocol("WM_DELETE_WINDOW", on_quit) 

Si estás usando algo como esto:

 import Tkinter root = Tkinter.Tk() root.bind('', lambda e: root.quit()) # quitting by pressing spacebar root.mainloop() 

y no: root.destroy() entonces el método quit matará al intérprete de Tcl, no solo saldrá del mainloop y eliminará todos los widgets. Así que una vez que root.quit() puedes estar seguro de que tu root está completamente muerto.

Todos los otros métodos que sugirió (como: wminfo_exists() ) solo están disponibles cuando existe al menos un Tk válido.


NOTA:

Si está utilizando más de un mainloop, debe usar el método de destrucción para asegurarse de que no se eliminará su mainloop principal , pero no creo que este sea su caso.