如何更新 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%。单击按钮后,我希望条形图缓慢增加。任何意见将是有益的!谢谢!
代码有两个问题:
command=clicked(progressBar)
确实调用函数 promptly.So 只需使用 command=clicked
。不需要将 progressBar 作为 argument 传递,因为该函数是从全局范围获取它的。
- 当函数
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()
我有一个程序可以执行一些简单的网页抓取。我正在努力将它提供给我的同事使用,但他们不熟悉代码,所以我想制作一个 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%。单击按钮后,我希望条形图缓慢增加。任何意见将是有益的!谢谢!
代码有两个问题:
command=clicked(progressBar)
确实调用函数 promptly.So 只需使用command=clicked
。不需要将 progressBar 作为 argument 传递,因为该函数是从全局范围获取它的。- 当函数
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()