繁体   English   中英

更新Tkinter进度栏

[英]Update Tkinter progress bar

我已经制作了一个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个文件,这只是使进度条正常工作的一些代码)。

单击开始按钮时,该代码应运行加载功能,但没有。 非常感谢您可以在此问题上为我提供的任何帮助=)

在事件驱动的编程(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()

暂无
暂无

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

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