У меня есть функция под названием анализ в другом py-файле, которая читает файл и выполняет какой-то другой анализ данных в зависимости от типа эксперимента.Я пытаюсь создать графический интерфейс для этой программы, где пользователи выбирают файл (имя файла) и тип эксперимента из раскрывающегося меню (пока не используется), а затем запускают функцию анализа на основе своих входных данных.
Я хотел, чтобы индикатор выполнения отображался, когда они нажимали кнопку запуска, чтобы пользователи знали, что он что-то делал, а затем исчезали, когда это было сделано.У меня GUI работает таким образом с некоторым тестовым кодом, который вызывается при нажатии Run.Теперь мне просто нужно сделать так, чтобы при нажатии кнопки Run вызывался анализ.Я понимаю, что мне нужно сделать это с потоками.Но я попытался выполнить многопоточность функции анализа, но ничего не происходит, так как анализ не запускается и индикатор выполнения не отображается / кнопка «Выполнить» не отключена.Иногда я получаю сообщение об ошибке:
analysis () принимает 1 позиционный аргумент, но 42 было дано
Я уверен, что я не понимаю, как работает многопоточность.
Вот как выглядит код:
import tkinter as tk
from tkinter import filedialog , messagebox, ttk
import time
from threading import Thread
from Analysis import analyze
filename=""
def browse():
global filename
filename = filedialog.askopenfilename()
Name.config(text=filename)
def run():
Run.config(state="disabled")
bar=tk.Frame(window)
bar.grid(column=1, row=4, pady=10)
pb=ttk.Progressbar(bar, orient="horizontal",mode='indeterminate', length=500)
pb.grid()
pb.start()
# for _ in range(50):
# time.sleep(.1) # simulate some work #code used to test the GUI
# pb.step(10)
# pb.update_idletasks()
run_thread()
pb.stop()
bar.destroy()
Run.config(state="normal")
def run_thread():
Thread(target=analyze, args=filename).start()
window=tk.Tk()
window.geometry("750x150")
window.grid_columnconfigure(1, weight=1)
lbFrame=tk.LabelFrame(window, text="Select a file")
lbFrame.grid(column=0,row=0)
button1=tk.Button(lbFrame, text="Browse", command=browse)
button1.grid()
Name=tk.Label(window)
Name.grid(column=1,row=0, sticky="W")
Select=tk.Label(window,text="Select Experiment :")
Select.grid(column=0, row=1)
var=tk.StringVar(window)
var.set("Blood")
dropdown=tk.OptionMenu(window,var,"Blood","Multi Blood","Multi Urine")
dropdown.grid(column=1, row=1,sticky="W")
bottom=tk.Frame(window, height=850)
bottom.grid(column=1,row=3)
Run=tk.Button(bottom,text="Run", bg="green", command=run)
Run.grid()
Run.config(width=25)
window.mainloop()
и анализ в основном
def analyze(filename):
#do some stuff