but I\'m trying to make the GUI for my script, when I click bt_send
I start a thread (thread_enviar
), that thread also start other thread (core
Question: RuntimeError: threads can only be started once
As I understand, you don't want to run multiple threads
, you only want to do a Task in a thread
to avoid freezing the Tk().mainloop()
.
To inhibit, to start a new thread
while the previous thread
are still running you have to disable
the Button
or verify if the previous thread
is still .alive()
.
import tkinter as tk
import threading, time
class Task(threading.Thread):
def __init__(self, master, task):
threading.Thread.__init__(self, target=task, args=(master,))
if not hasattr(master, 'thread_enviar') or not master.thread_enviar.is_alive():
master.thread_enviar = self
self.start()
def enviar(master):
# Simulating conditions
if 0:
pass
#if any(...
#elif len(data) < 300:
else:
#master.pg_bar.start(500)
# Simulate long run
time.sleep(10)
#rnn10f.forecasting(filepath)
print("VIVO?")
#master.pg_bar.stop()
class App(tk.Tk):
def __init__(self):
super().__init__()
bt_send = tk.Button(text="Send", bg="blue",
command=lambda :Task(self, enviar))
if __name__ == "__main__":
App().mainloop()