Tkinter ProgressBar зависает программа и не продолжает - PullRequest
0 голосов
/ 28 марта 2019

Я попытался реализовать индикатор выполнения Tkinter, используя многопоточность, просто чтобы увидеть, когда программа работает, и закрыть индикатор выполнения, когда программа заканчивается.

import tkinter
import ttk
import time
import threading

def task(root):
    ft = ttk.Frame()
    ft.pack(expand=True, fill=tkinter.BOTH, side=tkinter.TOP)
    pb_hD = ttk.Progressbar(ft, orient='horizontal', mode='indeterminate')
    pb_hD.pack(expand=True, fill=tkinter.BOTH, side=tkinter.TOP)
    pb_hD.start(50)
    root.mainloop()


def process_of_unknown_duration(root):
    time.sleep(5)
    root.destroy()


def pBar():
    root = tkinter.Tk()
    t1=threading.Thread(target=process_of_unknown_duration, args=(root,))
    t1.start()
    task(root)  # This will block while the mainloop runs
    t1.join()


if __name__ == '__main__':
    pBar()
    #some function

Моя проблема в том, что после запуска индикатора выполнения программа просто зависает и больше ничего не делает.Есть намеки?

1 Ответ

1 голос
/ 28 марта 2019

Это потому, что ваш звонок root.mainloop() блокирует выполнение вашего кода . Это в основном представляет цикл для вашего пользовательского интерфейса. Возможно, вы захотите посмотреть этот ответ для индикатора выполнения, который запускается кнопкой.

...