python线程只能启动一次_python-tkinter:RuntimeError:线程只能启动一次

  • Post author:
  • Post category:python


但是我正在尝试为我的脚本制作GUI,当我单击bt_send时,我启动了一个线程(thread_enviar),该线程也启动了其他线程(core),问题是thread_enviar一直在运行,因此当出现此错误时我尝试再次单击bt_send:

File “/anaconda3/envs/tensor/lib/python3.6/threading.py”, line 842, in start

raise RuntimeError(“threads can only be started once”)

RuntimeError: threads can only be started once

我的代码:

import tkinter as tk

from tkinter import filedialog

import pandas as pd

from tkinter import messagebox

from tkinter import ttk

import threading

import rnn10forecasting as rnn10f

filepath = “”

model = “”

”’def change_menu(selection):

global model

selected = selection

print(selected)

model = selected”’

def click():

global filepath

print(“click”)

filepath = filedialog.askopenfilename(initialdir = “/”,title = “Select file”,filetypes = ((“data files”,”*.csv”),(“all files”,”*.*”)))

print(filepath)

label_filepath.config(text = filepath)

def enviar():

print(filepath)

try:

data = pd.read_csv(filepath)

except:

messagebox.showerror(“Error”, “Archivo .csv vacio o formato incompatible”)

if any(data.columns.values != [‘date’,’close’,’volume’,’open’,’high’,’low’]):

messagebox.showerror(“Error”, “El archivo .csv no contiene la estructura requerida: [date,close,volume,open,high,low]”)

elif len(data) < 300:

print(“# registros”)

print(len(data))

messagebox.showerror(“Error”, “El archivo de be contener como minimo 700 registros”)

else:

pg_bar.start(500)

core = threading.Thread(target=rnn10f.forecasting, args=(filepath,))

#core.daemon = True

core.start()

core.join()

print(“VIVO?”)

print(core.isAlive())

pg_bar.stop()

return print(thread_enviar.is_alive())

thread_enviar = threading.Thread(target=enviar, args=())

window = tk.Tk()

window.resizable(width=False, height=False)

window.title(“LSTM Module”)

window.geometry(“600×150”)

title = tk.Label(text=”StockForecaster”, font=(“Times New Roman”, 30))

title.place(relx=0.1, rely=0.05, relwidth=0.8, relheight=0.25)

bt_select = tk.Button(text=”Select File”, bg=”blue”, command= click)

bt_select.place(relx=0.7, rely=0.4, relwidth=0.25, relheight=0.2)

label_filepath = tk.Label(text=”Please select a .csv File”)

label_filepath.place(relx=0, rely=0.4, relwidth=0.7, relheight=0.15)

options = tk.StringVar()

bt_send = tk.Button(text=”Send”, bg=”blue”, command=thread_enviar.start)

bt_send.place(relx=0.70, rely=0.7, relwidth=0.25, relheight=0.20)

pg_bar = ttk.Progressbar(window, orient= tk.HORIZONTAL, mode=”indeterminate”, )

pg_bar.place(relx=0.10, rely=0.75, relwidth=0.55, relheight=0.05)

window.mainloop()

我不知道是否有任何方法可以杀死该线程,或者我做错了什么.