Поскольку я начинающий, я пытался создать простейший индикатор выполнения, просто чтобы проверить, как работают мои потоки.Кажется, что это работает, но когда я закрываю окно индикатора выполнения, я получаю сообщение об ошибке («Tkinter Tcl_AsyncDelete: обработчик асинхронных операций удален не тем потоком»).Есть ли способ избежать этого?Я также не думаю, что это самое хорошее кодирование, так как я использую глобальные переменные, поэтому я очень открыт для любого предложения, как сделать его более простым и питонным.
from tkinter import *
import time
import threading
progress_percentage = 10
def progress_percentage_changer():
global progress_percentage
print("started working")
time.sleep(1) # lot of work ...
progress_percentage = 50
time.sleep(1) # lot of work ...
progress_percentage = 70
time.sleep(1) # lot of work ...
progress_percentage = 100
print("job done")
def progess_bar():
global progress_percentage
def update_progress_line(progress_line_id, canvas): # it just updates the bar
canvas.coords(progress_line_id, 0, 5, progress_percentage, 5)
root.after(1100, update_progress_line, progress_line_id, canvas)
root = Tk()
canvas = Canvas(root, bg="dark grey", height=10, width=100) # creating canvas
progress_line_id = canvas.create_line(0, 5, progress_percentage, 5, width=11,
fill="green") # creating the green progress line
canvas.grid(row=1)
update_progress_line(progress_line_id, canvas)
root.mainloop()
if __name__ == '__main__':
t1 = threading.Thread(target=progess_bar)
t2 = threading.Thread(target=progress_percentage_changer)
t1.start()
t2.start()
t1.join()
t2.join()