如何更新 tkinter 上的 ttk 进度条

How to update the ttk progress bar on tkinter

我有一个程序可以执行一些简单的网页抓取。我正在努力将它提供给我的同事使用,但他们不熟悉代码,所以我想制作一个 GUI。我已经开始使用 tkinter,目前正在制作一个进度条来显示程序所在的位置(可能需要几个小时才能完成 运行)。我的问题是我似乎无法更新进度条,而且所有在线资源都使用旧版本的 Tkinter。这是我的代码:

我已经尝试将 progressBar['value'] 更新为我想要的任何数字,但这一直没有奏效。

from tkinter import *
from tkinter import ttk
import time


def clicked(progressBar): # runs a couple functions and updates the progress bar when the button is clicked
    num = 0
    for item in range(5):
        # functions go here
        num += 10
        progressBar['value'] = num
        time.sleep(2)

window = Tk()
window.title("Welcome to my app")
window.geometry('600x400')

progressBar = ttk.Progressbar(window, orient='horizontal', length=300, mode='determinate', maximum=100, value=0)
progressBar.grid(columnspan=3, row=2, sticky=(W, E))

btn = Button(window, text="Click me!", command=clicked(progressBar))
btn.grid(column=1, row=1)

window.mainloop()

tkinter window 直到我 运行 程序 10 秒后才打开,它的进度条已经达到 50%。单击按钮后,我希望条形图缓慢增加。任何意见将是有益的!谢谢!

代码有两个问题:

  1. command=clicked(progressBar) 确实调用函数 promptly.So 只需使用 command=clicked。不需要将 progressBar 作为 argument 传递,因为该函数是从全局范围获取它的。
  2. 当函数 clicked() 为 运行 时,GUI 冻结。 5*2 秒后,progressBar 突然更新为 5*10。要循环更新小部件,请使用 update_idletastk 方法:
import tkinter as tk
from tkinter import ttk
import time


def clicked():
    num = 0
    for item in range(5):
        num += 10
        progressBar['value'] = num
        window.update_idletasks()
        time.sleep(2)

window = tk.Tk()

progressBar = ttk.Progressbar(window, orient='horizontal', length=300, mode='determinate', maximum=100, value=0)
progressBar.grid(columnspan=3, row=2, sticky=(tk.W, tk.E))

btn = tk.Button(window, text="Click me!", command=clicked)
btn.grid(column=1, row=1)

window.mainloop()