Tkinter进度条挂起程序,不会继续

问题描述 投票:0回答:1

我试图使用线程来实现一个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

我的问题是,一旦进度条启动,程序就会挂起而不会做任何其他事情。任何提示?

python tkinter progress
1个回答
1
投票

这是因为你的电话root.mainloop() is blocking the execution of your code。它基本上代表了UI的循环。您可能需要查看this answer以获取按钮启动的进度条。

© www.soinside.com 2019 - 2024. All rights reserved.