【问题标题】:How to update the ttk progress bar on tkinter如何在 tkinter 上更新 ttk 进度条
【发布时间】:2019-12-01 22:39:10
【问题描述】:

我有一个程序可以进行一些简单的网页抓取。我正在努力将它提供给我的同事使用,但他们不熟悉代码,所以我想制作一个 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 窗口在我运行程序 10 秒后才打开,并且进度条已满 50%。我希望栏在单击按钮后慢慢增加。任何意见将是有益的!谢谢!

【问题讨论】:

    标签: python tkinter ttk


    【解决方案1】:

    代码有两个问题:

    1. command=clicked(progressBar)确实会及时调用该函数。所以只需使用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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-02
      • 1970-01-01
      • 2021-07-11
      • 1970-01-01
      • 2022-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多