更新 Tkinter 进度条

     2023-02-23     21

关键词:

【中文标题】更新 Tkinter 进度条【英文标题】:Update Tkinter progress bar 【发布时间】:2018-11-02 21:56:18 【问题描述】:

我已经制作了一个用于从网站下载许多文件的 python 脚本,我想在 Tkinter 中制作一个进度条,当每个文件保存到计算机时它应该会更新。我已经看到了一些使用 OOP 的示例,但我仍在掌握 OOP,并且有朝一日希望了解人们在 Tkinter 中制作 GUI 应用程序时为什么使用 OOP。也许一位好心的用户可以为我澄清这一点。

我的代码在这里显示:

from Tkinter import *
import ttk
import numpy as np

global files
files = np.arange(1,1000000)

def loading():
    global downloaded
    downloaded = 0
    for i in array:
        downloaded +=1

root = Tk()

progress= ttk.Progressbar(root, orient = 'horizontal', maximum = 1000000, value = downloaded, mode = 'determinate')
progress.pack(fill=BOTH)
start = ttk.Button(root,text='start',command=loading)
start.pack(fill=BOTH)

root.mainloop()

我创建了一个代表文件数量的变量(我并不是真的想下载 1000000 个文件,这只是一些让进度条工作的代码)。

当点击开始按钮时,代码应该运行加载函数,但它没有。我非常感谢您在这个问题上给我的任何帮助 =)

【问题讨论】:

你不需要使用global files,因为files已经在全局空间中定义了。 【参考方案1】:

在事件驱动编程 (GUI) 中,您不能有像 for 循环这样的阻塞循环。您必须使用after 设置事件才能再次运行函数。这与迭代器结合得很好:

from Tkinter import *
import ttk
import numpy as np

root = Tk()

files = iter(np.arange(1,10000))


downloaded = IntVar()
def loading():
    try:
        downloaded.set(next(files)) # update the progress bar
        root.after(1, loading) # call this function again in 1 millisecond
    except StopIteration:
        # the files iterator is exhausted
        root.destroy()

progress= ttk.Progressbar(root, orient = 'horizontal', maximum = 10000, variable=downloaded, mode = 'determinate')
progress.pack(fill=BOTH)
start = ttk.Button(root,text='start',command=loading)
start.pack(fill=BOTH)

root.mainloop()

【讨论】:

感谢您的回答。你能解释一下加载函数中发生了什么以及为什么 files 应该是 numpy 数组的 iter 吗? 另外,函数完成后如何关闭根窗口而不是引发异常? iter 允许您使用next() 函数来获取下一个数字(或文件名或其他)。这是制作循环的便捷方式。使用 try 块更新代码以检测循环的结束。

如何循环更新进度条?

...op?【发布时间】:2016-07-3017:09:03【问题描述】:循环更新Tkinter进度条的简单方法是什么?我需要一个没有太多混乱的解决方案,所以我可以在我的脚本中轻松实现它,因为它对我来说已经相当复杂了。假设代码是:fromTkinterimport... 查看详情

带进度条的tkinter链接按钮(代码片段)

我正在使用Tkinter创建一个cookieclicker应用程序。我想在我的程序中有一个进度条,每次点击cookie100次就会填满。我使用importttk创建了进度条,但是每当按下按钮时我都不知道如何更新进度条。到目前为止,这是我的代码:fromTkinte... 查看详情

python的Tkinter中的Windows进度条

】python的Tkinter中的Windows进度条【英文标题】:Windowsprogressbarinpython\'sTkinter【发布时间】:2011-09-1721:53:57【问题描述】:在python的Tkinter、bwidget或任何类似的东西中是否有任何方法可以显示Windwos的默认进度条?我已经知道bwidget.Pr... 查看详情

用于多处理的 tkinter 进度条

】用于多处理的tkinter进度条【英文标题】:tkinterprogressbarformultiprocessing【发布时间】:2021-12-2223:08:36【问题描述】:我有一个加密文件的程序,我使用多处理使其更快,但我在tkinter进度条上遇到问题。我已经实现了它,但它会... 查看详情

将文本格式化到 Tkinter 进度条

】将文本格式化到Tkinter进度条【英文标题】:FormattingTexttotheTkinterProgressbar【发布时间】:2022-01-1910:22:30【问题描述】:我知道根据这个问题将文本添加到进度条:Displayingpercentageinttkprogressbar这对我有帮助,但我需要对答案进行... 查看详情

在 matplotlib 窗口打开时关闭 tkinter 进度条窗口

】在matplotlib窗口打开时关闭tkinter进度条窗口【英文标题】:Closeatkinterprogressbarwindowwhilematplotlibwindowisopen【发布时间】:2013-07-2321:38:02【问题描述】:我正在编写一个程序来完成一些工作并使用matplotlib来绘制一些数据。这可能需... 查看详情

tkinter进度条

1importtkinterastk23window=tk.Tk()4window.title("我的窗口")5window.geometry(‘600x400‘)67var1=tk.StringVar()8label=tk.Label(window,bg=‘yellow‘,width=30,heigh=2,text="empty")9label.pack()10defselect(v):11la 查看详情

Tkinter:如何使用线程来防止主事件循环“冻结”

】Tkinter:如何使用线程来防止主事件循环“冻结”【英文标题】:Tkinter:Howtousethreadstopreventingmaineventloopfrom"freezing"【发布时间】:2013-05-2016:14:54【问题描述】:我有一个带有“开始”按钮和进度条的小型GUI测试。期望的... 查看详情

更新 tkinter 中的滚动条

】更新tkinter中的滚动条【英文标题】:Updatescrollbarintkinter【发布时间】:2022-01-1221:25:11【问题描述】:我正在用python编程,我需要创建一个滚动条,当新的小部件添加到窗口时会更新。我不知道该怎么做,也没有在任何地方找... 查看详情

如何更新引导进度条。

】如何更新引导进度条。【英文标题】:Howtoupdatebootstrapprogressbar.【发布时间】:2016-11-2216:23:07【问题描述】:关于引导进度条的文档说明了如何显示具有默认值和完成值的进度条,但现在如何更新它?那么,更新值和宽度的最... 查看详情

iOS 进度条不更新

】iOS进度条不更新【英文标题】:iOSprogressbarnotupdating【发布时间】:2016-11-3019:13:13【问题描述】:我遇到了一个进度条没有更新的问题(它一直是灰色的)。我得到了这个方法来更新MainViewController.m中的进度条:-(void)setProgress:(f... 查看详情

Android AsyncTask 没有更新进度条

】AndroidAsyncTask没有更新进度条【英文标题】:AndroidAsyncTaskisnotupdatingProgressBar【发布时间】:2019-01-0822:46:38【问题描述】:您好,我在使用asynctask时遇到问题。我播放了一首歌曲,然后将持续时间更新到进度条。但是当我播放一... 查看详情

使用 Flask 更新进度条

】使用Flask更新进度条【英文标题】:UpdatingprogressbarwithFlask【发布时间】:2019-07-1011:40:45【问题描述】:我正在尝试更新进度条-我尝试在下面的代码周围实现代码here,但无法使其正常工作。当我运行我的代码时,进度条会出现... 查看详情

网络通话期间的进度条更新

】网络通话期间的进度条更新【英文标题】:Progressbarupdateduringanetworkcall【发布时间】:2017-01-2402:40:39【问题描述】:我正在尝试在网络调用期间实现水平进度条更新。我用来进行网络调用的API只需回调onSuccess和onFailure。完成大... 查看详情

如何更新进度条 OnSelectedIndexChanged?

】如何更新进度条OnSelectedIndexChanged?【英文标题】:HowdoIupdateaprogressbarOnSelectedIndexChanged?【发布时间】:2009-06-1105:38:21【问题描述】:我正在使用.NET(C#)开发一个Windows应用程序,并且我有一个带有一些列表项的DropDownList。在事件... 查看详情

Inno Setup - 正确定时更新进度条

】InnoSetup-正确定时更新进度条【英文标题】:InnoSetup-Correctlytimingupdateofprogressbar【发布时间】:2016-12-0217:02:05【问题描述】:我忘记了如何在InnoSetup中根据条件正确更新进度条,我写了一个代码来更新我在Wizard中创建的进度条。... 查看详情

ReactJS进度条使用状态动态更新?

】ReactJS进度条使用状态动态更新?【英文标题】:ReactJSprogressbardynamicallyupdatingusingstate?【发布时间】:2021-01-2720:58:29【问题描述】:我正在使用PrimeReact进度条,并希望在页面加载时动态更新它。我的代码在下面-constIntroPage=()=>... 查看详情

在循环期间更新进度条

】在循环期间更新进度条【英文标题】:Updatingprogressbarduringloop【发布时间】:2017-01-1718:07:30【问题描述】:我有两个控制器。首先,我有一个进度条,并且有一个获取数据和循环的请求。我需要在循环期间更新第一个控制器上... 查看详情