Tkinter使用Progressbar创建和管理进度条的操作代码
作者:檬柠wan
Progressbar是Tkinter库中的一个小部件,用于创建和管理进度条,这篇文章主要介绍了Tkinter使用Progressbar创建和管理进度条,本文结合实例代码给大家介绍的非常详细,需要的朋友可以参考下
前言
Progressbar是Tkinter库中的一个小部件,用于创建和管理进度条。它可以在图形用户界面中显示任务的进度,并提供了多种样式和配置选项。
使用Progressbar,你可以按照固定或不确定的进度展示任务的进行状态。它可以显示任务完成的百分比,或者在不确定的情况下,显示一个动画效果表示任务正在进行。
以下是一些Progressbar的重要属性和方法:
- length:指定进度条的长度。
- mode:指定进度条的模式,可以是"determinate"(确定模式)或"indeterminate"(不确定模式)。
- maximum:设置进度条的最大值,默认为100。
- value:设置进度条的当前值。
- start():启动进度条的动画效果,仅在不确定模式下有效。
- stop():停止进度条的动画效果,仅在不确定模式下有效。
通过使用这些属性和方法,你可以创建一个自定义的进度条并根据需要进行更新和控制。
一、indeterminate 模式
在这个模式下指针左右移动,主要目的是要让用户知道程序还在运行
import tkinter as tk from tkinter.ttk import Progressbar class Simulate_Waiting_State: def __init__(self): self.root = tk.Tk() self.root.title('进度条下载演示') self.root.geometry("300x150+1100+150") self.interface() def interface(self): # 创建进度条 self.progress_bar = Progressbar(self.root, length=200, mode="indeterminate") # 创建按钮 self.start_button = tk.Button(self.root, text="开始", command=self.start_progress) self.stop_button = tk.Button(self.root, text="停止", command=self.stop_progress) # 将进度条和按钮放置在窗口中 self.progress_bar.grid(row=0, column=1, pady=20, padx=50, columnspan=100) self.start_button.grid(row=1, column=1, padx=75) self.stop_button.grid(row=1, column=3) def start_progress(self): self.progress_bar.start() def stop_progress(self): self.progress_bar.stop() if __name__ == '__main__': run = Simulate_Waiting_State() run.root.mainloop() import tkinter as tk from tkinter.ttk import Progressbar class Simulate_Waiting_State: def __init__(self): self.root = tk.Tk() self.root.title('进度条下载演示') self.root.geometry("300x150+1100+150") self.interface() def interface(self): # 创建进度条 self.progress_bar = Progressbar(self.root, length=200, mode="indeterminate") # 创建按钮 self.start_button = tk.Button(self.root, text="开始", command=self.start_progress) self.stop_button = tk.Button(self.root, text="停止", command=self.stop_progress) # 将进度条和按钮放置在窗口中 self.progress_bar.grid(row=0, column=1, pady=20, padx=50, columnspan=100) self.start_button.grid(row=1, column=1, padx=75) self.stop_button.grid(row=1, column=3) def start_progress(self): self.progress_bar.start() def stop_progress(self): self.progress_bar.stop() if __name__ == '__main__': run = Simulate_Waiting_State() run.root.mainloop()
二、determinate模式
1、模拟下载进度
import tkinter as tk from tkinter.ttk import Progressbar import threading import time class Download_Files: def __init__(self): self.root = tk.Tk() self.root.title('进度条下载演示') self.root.geometry("300x150+1100+150") self.interface() def interface(self): # 创建进度条 self.progress_bar = Progressbar(self.root, length=200, mode="determinate") # 创建按钮 self.start_button = tk.Button(self.root, text="开始下载", command=self.download) # 将进度条和按钮放置在窗口中 self.progress_bar.grid(row=0, pady=20, padx=50) self.start_button.grid(row=1, padx=50) # 进度值最大值 self.progress_bar['maximum'] = 100 def download(self): """进度条模拟显示下载进度""" # 进度值初始值 initial_value = 0 while initial_value < 100: initial_value += 1 # 更新进度条的值 self.progress_bar['value'] = initial_value self.root.update() # 模拟等待时间时间 time.sleep(0.1) def thread_management(self): """启用子线程下载文件""" T1 = threading.Thread(target=self.download, daemon=True) T1.start() if __name__ == '__main__': run = Download_Files() run.root.mainloop()
2、真实下载进度
import tkinter as tk from tkinter.ttk import Progressbar from tkinter import messagebox import threading import requests class Download_Files: def __init__(self): self.root = tk.Tk() self.root.title('进度条下载演示') self.root.geometry("300x150+850+350") self.interface() def interface(self): # 创建进度条 self.progress_bar = Progressbar(self.root, length=200, mode="determinate") # 创建按钮 self.start_button = tk.Button(self.root, text="开始下载", command=self.thread_group) # 将进度条和按钮放置在窗口中 self.progress_bar.grid(row=0, pady=20, padx=50) self.start_button.grid(row=1, padx=50) def download(self): # 禁用按钮 self.start_button.config(state=tk.DISABLED) # 下载地址 url = 'http://www.python.org/ftp/python/2.7.5/Python-2.7.5.tar.bz2' file_data = requests.get(url, stream=True) # 获取文件大小,单位字节(B) if "content-length" in file_data.headers: maxbyte = int(file_data.headers["content-length"]) # 截取文件名称 filename = url.split("/")[-1] with open(filename, "wb") as f: downloaded_bytes = 0 for chunk in file_data.iter_content(chunk_size=1024): if chunk: f.write(chunk) downloaded_bytes += len(chunk) # 更新进度条的值 # 将已下载的字节数除以文件总大小(maxbyte),然后乘以100,得到已下载的数据量相对于文件总大小的百分比 self.progress_bar['value'] = downloaded_bytes / maxbyte * 100 self.root.update() # 弹窗提示下载完成 messagebox.showinfo("下载提示", "文件下载完成!") # 恢复按钮的可点击状态 self.start_button.config(state=tk.NORMAL) # 下载完成后重置进度条的值 self.progress_bar['value'] = 0 def thread_group(self): """启用子线程下载""" T1 = threading.Thread(name='download', target=self.download, daemon=True) T1.start() if __name__ == '__main__': run = Download_Files() run.root.mainloop()
到此这篇关于Tkinter使用Progressbar创建和管理进度条的文章就介绍到这了,更多相关Tkinter Progressbar进度条内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!