У меня очень простой графический интерфейс, созданный с помощью tkinter, который содержит индикатор выполнения, который должен отображать активность программы во время длительной функции обработки.Как я понимаю, я должен использовать потоки, так как tkinter является однопоточным, поэтому я написал следующий код:
def start(self):
self.root.progressbar.start(interval=5)
try:
path = tk.filedialog.asksaveasfilename(initialfile='log.txt', filetypes=[("Text file", "*.txt")],
initialdir='~/Desktop')
if path:
filtering_thread = FilteringThread(self.comparator)
filtering_thread.run()
self.root.progressbar.stop()
self.comparator.log_matches(path)
else:
messagebox.showinfo("Error", "Choose path to save result.")
except FileNotFoundError as e:
messagebox.showinfo("Error", str(e))
А вот моя реализация FilteringThread:
class FilteringThread(Thread):
def __init__(self, comparator):
Thread.__init__(self)
self.comparator = comparator
def run(self):
import time
for _ in range(5):
time.sleep(1)
print("IN THREAD")
На данный момент это просто имитируетповедение реальной функции, но идея остается прежней.Я должен видеть в консоли, что он печатает «IN THREAD» 5 раз, в то время как индикатор выполнения должен подпрыгивать вокруг GUI.
Но это не работает: кто-нибудь может указать мне на ошибку, которую я делаю?У меня заканчиваются идеи.