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í:
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!