¿Cómo puedo monitorear los botones Tkinter cuando Python está ocupado?

Estoy desarrollando una aplicación Python 2.7.1 / Tkinter 8.4 en Windows XP que comprueba varias líneas de entrada desde un puerto RS-232. Sin embargo, si no llega ninguna entrada, permanecerá en un bucle para siempre.

Estoy tratando de implementar un botón ‘Abandonar prueba’ en la GUI, pero como el hilo principal está ocupado esperando la entrada, no aparece en todas las comprobaciones si se ha presionado un botón. He intentado update_idletasks () y time.sleep (1) sin éxito.

¿Alguna sugerencia?

Tk es de un solo hilo, por lo que si el hilo principal está ocupado, la GUI se congelará. Una solución es usar un hilo separado para hacer la lectura, de modo que cuando el bloque de lectura pueda continuar, su hilo principal puede continuar. Cuando obtiene una línea de entrada, puede empujarla en una cola que está supervisada por el hilo principal.

La otra forma es averiguar cómo hacer una lectura sin locking en su puerto serie. Si hay datos, léelo. Si no, vuelva al bucle principal del evento. A continuación, debe configurar el bucle de eventos para sondear su puerto cada unos cientos de milisegundos, según sus necesidades de rendimiento.