Duda con manejo de hilos en python

Iniciado por Azav, Noviembre 02, 2014, 04:13:15 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Noviembre 02, 2014, 04:13:15 PM Ultima modificación: Noviembre 02, 2014, 05:52:17 PM por blackdrake
He escuchado que en Python el manejo de hilos es un poco enredado y que tampoco se lleva muy bien con tkinter, el problema que tengo es el siguiente: tengo una clase para la interfaz, y otra clase para un proceso cualquiera (es un proceso que se queda en un while infinito). Inicio primero la clase de la interfaz y luego la clase con el proceso infinito. Luego, mi idea es que cuando se cierre la interfaz, también se termine el proceso infinito y el programa termine. El código simplificado sería así:

Código: python
import time, threading
from tkinter import *
from tkinter import messagebox

finalizar = False

class Interfaz(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)

def run(self):
global finalizar
#Main Window
self.mainWindow = Tk()
self.mainWindow.geometry("200x200")
self.mainWindow.title("My GUI Title")
#Label
lbCommand = Label(self.mainWindow, text="Hola mundo", font=("Courier New", 16)).place(x=20, y=20)
#Start
self.mainWindow.mainloop()
#Cuando se cierre la GUI seteamos finalizar a True
finalizar = True

class ClaseDos(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)

def run(self):
global finalizar
while not finalizar:
print("Loop")
time.sleep(3)

GUI = Interfaz()
GUI.start()
Clase = ClaseDos()
Clase.start()


Cuando hago click en el botón cerrar (en la esquina superior derecha de la GUI) me lanza el siguiente error:

CitarTcl_AsyncDelete: async handler deleted by the wrong thread

No logro entender por qué este error, y en Google no encuentro mucha información útil. ¿Alguien sabe a qué se debe?

¡Saludos!