如何解决如何在ttk中创建下载进度栏?
对于确定模式,您不想调用start
。相反,只需配置value
小部件的或调用step
方法。
如果您事先知道要下载多少个字节(并且我假设您这样做是因为您正在使用确定模式),那么最简单的事情就是将maxvalue
选项设置为要读取的数字。然后,每次读取块时,将设置value
为读取的字节总数。然后,进度条将计算出百分比。
这是一个模拟,可以让您大致了解:
import tkinter as tk
from tkinter import ttk
class SampleApp(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
self.button = ttk.Button(text="start", command=self.start)
self.button.pack()
self.progress = ttk.Progressbar(self, orient="horizontal",
length=200, mode="determinate")
self.progress.pack()
self.bytes = 0
self.maxbytes = 0
def start(self):
self.progress["value"] = 0
self.maxbytes = 50000
self.progress["maximum"] = 50000
self.read_bytes()
def read_bytes(self):
'''simulate reading 500 bytes; update progress bar'''
self.bytes += 500
self.progress["value"] = self.bytes
if self.bytes < self.maxbytes:
# read more bytes after 100 ms
self.after(100, self.read_bytes)
app = SampleApp()
app.mainloop()
为此,您需要确保不阻塞GUI线程。这意味着您可以分块读取(如示例中所示)或在单独的线程中进行读取。如果使用线程,则将无法直接调用progressbar方法,因为tkinter是单线程的。
您可能会在tkdocs.com上发现Progressbar示例很有用。
解决方法
我想在使用该urllib.urlretrive
方法从网上下载文件时显示进度条。
如何使用ttk.Progressbar
来执行此任务?
到目前为止,这是我所做的:
from tkinter import ttk
from tkinter import *
root = Tk()
pb = ttk.Progressbar(root,orient="horizontal",length=200,mode="determinate")
pb.pack()
pb.start()
root.mainloop()
但是它一直循环播放。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。