Correr tu propio código junto con Tkinter

Problema

El método .mainloop( ) de tkinter es un bucle infinito que se encarga de procesar eventos una vez que los widgets estáticos han sido creado (una vez que se ha inicializado la UI) y de actualizar la ventana.
Si queremos introducir nuestro código, para que por ejemplo procese eventos externos:
  • Podemos usar el método after(delay_ms, callback=None, *args) para llamar a una función cada un determinado tiempo (en ms).
¿Y si queremos ejecutar un bucle infinito en paralelo al mainloop del tkinter que por ejemplo monitorice un log?:
  • Podemos usar el método anterior para llamar a la función que contendrá el bucle infinito y usar el método update( ) dentro de la función. Este método fuerza a que se actualice la ventana.
  • Ejecutar tkinter en un hilo (thread) diferente. Ver el código abajo.
Código

Código sacado de stackoverflow:
import Tkinter
import threading
class MyTkApp(threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self)
        self.start()
    def callback(self):
       self.root.quit()
    def run(self):
        self.root=Tkinter.Tk()
        self.root.protocol("WM_DELETE_WINDOW", self.callback)
        self.s = Tkinter.StringVar()
        self.s.set('Foo')
        l = Tkinter.Label(self.root,textvariable=self.s)
        l.pack()
        self.root.mainloop()
app = MyTkApp()
print 'now can continue running code while mainloop runs'
Enlaces

Can't invoke "update" command:  application has been destroyed.