繁体   English   中英

TKinter弹出进度栏

[英]TKinter Popup Progress Bar

我试图制作一个弹出进度条,以显示单击按钮后某些文件下载的进度。 我可以完美地执行与按钮链接的命令,但是我正在努力创建一个弹出进度栏。

这是我到目前为止的

 def button_command(self):
    #start progress bar
    popup = tk.Toplevel()
    tk.Label(popup, text="Files being downloaded").grid(row=0,column=0)

    progress = 0
    progress_var = tk.DoubleVar()
    progress_bar = ttk.Progressbar(popup, variable=progress_var, maximum=100)
    progress_bar.grid(row=1, column=0)#.pack(fill=tk.X, expand=1, side=tk.BOTTOM)
    popup.pack_slaves()

    progress_step = float(100.0/len(teams))
    for team in self.teams:

        self.do_work()


        progress += progress_step
        progress_var.set(progress)
        popup.update_idletasks()


    return 0

当前正在创建一个弹出窗口,但其中没有任何内容。 如果有人对此有经验,将非常感谢您的帮助!

谢谢,泰勒

我认为您的问题是由于update_idletasks在您的for循环中的位置所致。 您在第一次调用self.do_work之后调用它,因此带有进度self.do_work的GUI仅在任务完成后才更新/显示。 至少,这就是我所经历的与测试代码time.sleep而不是do_work 因此,您应该在启动第一个任务之前先更新GUI。 我还注意到,当我使用update而不是update_idletasks ,进度条显示得更快,但我不知道为什么。

import tkinter as tk
from tkinter import ttk
from time import sleep

teams = range(100)

def button_command():
    #start progress bar
    popup = tk.Toplevel()
    tk.Label(popup, text="Files being downloaded").grid(row=0,column=0)

    progress = 0
    progress_var = tk.DoubleVar()
    progress_bar = ttk.Progressbar(popup, variable=progress_var, maximum=100)
    progress_bar.grid(row=1, column=0)#.pack(fill=tk.X, expand=1, side=tk.BOTTOM)
    popup.pack_slaves()

    progress_step = float(100.0/len(teams))
    for team in teams:
        popup.update()
        sleep(5) # lauch task
        progress += progress_step
        progress_var.set(progress)

    return 0

root = tk.Tk()

tk.Button(root, text="Launch", command=button_command).pack()

root.mainloop()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM