Tkinter_使用Progressbar创建和管理进度条

前言

  Progressbar是Tkinter库中的一个小部件,用于创建和管理进度条。它可以在图形用户界面中显示任务的进度,并提供了多种样式和配置选项。

  使用Progressbar,你可以按照固定或不确定的进度展示任务的进行状态。它可以显示任务完成的百分比,或者在不确定的情况下,显示一个动画效果表示任务正在进行。

以下是一些Progressbar的重要属性和方法:

  • length:指定进度条的长度。
  • mode:指定进度条的模式,可以是"determinate"(确定模式)或"indeterminate"(不确定模式)。
  • maximum:设置进度条的最大值,默认为100。
  • value:设置进度条的当前值。
  • start():启动进度条的动画效果,仅在不确定模式下有效。
  • stop():停止进度条的动画效果,仅在不确定模式下有效。

通过使用这些属性和方法,你可以创建一个自定义的进度条并根据需要进行更新和控制。

一、indeterminate 模式

在这个模式下指针左右移动,主要目的是要让用户知道程序还在运行

import tkinter as tk
from tkinter.ttk import Progressbarclass 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 timeclass 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'] = 100def download(self):"""进度条模拟显示下载进度"""# 进度值初始值initial_value = 0while initial_value < 100:initial_value += 1# 更新进度条的值self.progress_bar['value'] = initial_valueself.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 requestsclass 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 = 0for 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 * 100self.root.update()# 弹窗提示下载完成messagebox.showinfo("下载提示", "文件下载完成!")# 恢复按钮的可点击状态self.start_button.config(state=tk.NORMAL)# 下载完成后重置进度条的值self.progress_bar['value'] = 0def thread_group(self):"""启用子线程下载"""T1 = threading.Thread(name='download', target=self.download, daemon=True)T1.start()if __name__ == '__main__':run = Download_Files()run.root.mainloop()

请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/9501.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

matplotlib设置坐标轴为象限模式

import numpy as np import matplotlib.pyplot as pltx np.linspace(-np.pi, np.pi, 1000) cosy np.cos(x) siny np.sin(x)plt.xlim(min(x), max(x)) plt.ylim(min(cosy), max(cosy)0.5) plt.plot(x, cosy) plt.plot(x, siny) # 设置坐标刻度 plt.xticks([-np.pi, -np.pi/2,…

微前端(拆分和细化,整合历史系统)

接入微前端 项目背景说明 假如我们完成了基于Vue2的项目&#xff0c;假设另外一个团队的小伙伴来实现前台可视化部分&#xff0c;他们使用的是最新的Vue3技术栈&#xff0c;现在有一个需求&#xff0c;他们的前台项目想直接使用我们的登录功能&#xff0c;获得token&#xff…

数据结构与算法(持续更新中..)

一. 概论 1. 数据结构 队列&#xff1a;一种遵循先进先出 (FIFO / First In First Out) 原则的一组有序的项&#xff1b;队列在尾部添加新元素&#xff0c;并从头部移除元素。最新添加的元素必须排在队列的末尾。&#xff08;例如&#xff1a;去食堂排队打饭&#xff0c;排在前…

新版本vscode使用配置文件功能,解决不同项目使用不同的插件

如果你同时有vue2,vue3的项目。一定会遇到插件的问题。因为vue2项目插件是使用vetur的&#xff0c;vue3是使用volar的。 以前vscode为了在不同项目中能使用不同的配置文件&#xff0c;是使用工作区的概念去解决的&#xff0c;但是比较复杂而且不好用。 现在新版本的vscode&…

Go语言操作MySql数据库

go-sql-driver/mysql库是Go语言官方推荐的MySQL驱动库&#xff0c;可以很方便地实现对MySQL数据库的连接和操作。本文记录以下使用go-sql-driver/mysql数据库驱动来操作mysql数据库。 目录 1.安装驱动程序 2.导入驱动包 3.操作数据库 3.1 获取mysql版本 3.2 创建表 3.3 …

中介者模式的学习与使用

1、中介者模式的学习 中介者模式是一种行为型设计模式&#xff0c;它通过引入一个中介者对象来解耦一组对象之间的交互。中介者模式促进了对象之间的松耦合&#xff0c;使得它们可以独立地进行通信&#xff0c;而不需要直接相互引用。   在中介者模式中&#xff0c;有以下几个…

rabbitMq怎么查看队列消息-Tracing日志

Trace 是Rabbitmq用于记录每一次发送的消息&#xff0c;方便使用Rabbitmq的开发者调试、排错。 1、启动Tracing插件 在RabbitMQ中默认是关闭的&#xff0c;需手动开启。此处rabbitMQ是使用docker部署的 ## 进入rabbitMq中 docker exec -it rabbitmq1 bash ## 启动日志插件 rabb…

设计模式篇---建造者模式

文章目录 概念结构实例总结 概念 建造者模式的定义&#xff1a;将一个复杂对象的构建与它的表示分离&#xff0c;使得同样的构造过程可以创建不同的表示。 这么看起来有点难以理解&#xff0c;翻译一下就是 用户无需关注创建复杂对象的过程&#xff0c;只需要指定创建的对象即…

多元回归预测 | Matlab基于粒子群算法优化深度置信网络(PSO-DBN)的数据回归预测,matlab代码回归预测,多变量输入模型

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 多元回归预测 | Matlab基于基于粒子群算法优化深度置信网络(PSO-DBN)的数据回归预测,matlab代码回归预测,多变量输入模型,多变量输入模型 评价

计算机网络_ 1.3 网络核心(数据交换_电路交换_多路复用)

计算机网络_数据交换_电路交换_多路复用 多路复用频分多路复用FDM时分多路复用TDM波分多路复用WDM码分多路复用CDM 多路复用 多路复用&#xff08;Multiplexing&#xff09;&#xff0c;简称复用&#xff0c;是通信技术的基本概念。 链路/网络资源&#xff08;如带宽&#x…

浅谈数据中心机房动环监控系统可视化设计与研究

安科瑞电气股份有限公司 上海嘉定 201801 摘要&#xff1a;为了维护好数据中心机房动力环境&#xff0c;及时发现隐患和排除故障&#xff0c;降低管理成本控制能耗&#xff0c;提高运维效率&#xff0c;保障数据中心安全、高效、环保、稳定的运行&#xff0c;针对目前机房管理…