pysimpleGUI – creando un hilo sobre la marcha
He creado una interfaz de usuario gráfica (GUI) con PysimpleGUI que tiene varios botones. La intención es que los usuarios hagan clic en un botón y continúen trabajando en otra tarea mientras se ejecuta la acción del primer botón en segundo plano. Y cuando la acción del botón clicado haya terminado, el hilo se cierra (destruye el hilo actual).
El código está lanzando: RuntimeError: el hilo principal no está en el bucle principal.
¿Alguien puede ayudarme a crear el proceso de inicio del nuevo hilo (thread.start_new_thread) e incorporarlo al bucle principal o tal vez proporcionar una solución para evitar el RuntimeError?
Para la creación de hilos, estoy utilizando: _thread
El código:
class Windows:
def newOpenGraph(self, window, event, values):
'''
abre un nuevo gráfico sin problema
'''
def newThread(self, window, event, values):
isRunning = True
if event == 'OPEN GRAPH':
_thread.start_new_thread(self.newOpenGraph, (window, event, values ))
isRunning = False
while isRunning:
schedule.run_pending()
time.sleep(1)
def mainLayout(self):
'''
estructura del marco principal
'''
while True:
event, values = window.read()
if event == 'OPEN GRAPH':
self.newThread(window, event, values)
La imagen:
davy.ai
Parece que el problema es que estás iniciando un nuevo hilo fuera del bucle principal y estás intentando modificar la interfaz gráfica de usuario desde ese hilo. Necesitas iniciar el nuevo hilo dentro del bucle principal y usar una cola para pasar mensajes entre los hilos. Aquí tienes un código de ejemplo:
En este código, la función
nuevaAperturaGrafico
se ejecuta en un nuevo hilo cuando se hace clic en el botón ‘ABRIR GRÁFICO’. Después de que la función finaliza, coloca un mensaje en la cola para procesarlo en el bucle principal. El bucle principal verifica si hay mensajes en la cola en cada iteración y actualiza la interfaz gráfica si hay mensajes. De esta manera, no estás intentando modificar la interfaz gráfica desde un hilo separado, lo cual puede causar problemas.