Ошибка индикатора выполнения Tkinter: Tkinter Tcl_AsyncDelete: обработчик асинхронных операций удален не тем потоком - PullRequest
0 голосов
/ 14 марта 2019

Поскольку я начинающий, я пытался создать простейший индикатор выполнения, просто чтобы проверить, как работают мои потоки.Кажется, что это работает, но когда я закрываю окно индикатора выполнения, я получаю сообщение об ошибке («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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...