Python之tkinter进度条Progressbar用法解读
作者:qq_1471587327 发布时间:2023-07-15 17:14:57
Progressbar 基本概念
Progressbar 可以解释为进度条,主要是当做一个工作进度的指针,在这个控件中会有一个指针,由此指针可以了解工作进度
构造方法如下:
Progressbar(父对象, options, ...)
参数:
第一个参数:父对象,表示这个进度条将建立在哪一个窗口内
第二个参数:
options
,参数如下
参数 | 含义 |
---|---|
length | 进度条的长度默认是100像素 |
mode | 可以有两种模式,下面作介绍 |
maximum | 进度条的最大值默认是100像素 |
name | 进度条的名称,供程序参考引用 |
orient | 进度条的方向,可以是HORIZONTAL(默认) 或者是 VERTICAL |
value | 进度条的目前值 |
variable | 记录进度条目前的进度值 |
mode参数
determinate
:一个指针会从起点移至终点,通常当我们知道所需工作时间时,可以使用此模式,这是默认模式indeterminate
:一个指针会在起点和终点间来回移动,通常当我们不知道工作所需时间时,可以使用此模式 Progressbar
基本应用
例子:
import tkinter
import tkinter.ttk
root = tkinter.Tk()
root.geometry('150x120')
progressbarOne = tkinter.ttk.Progressbar(root)
progressbarOne.pack(pady=20)
# 进度值最大值
progressbarOne['maximum'] = 100
# 进度值初始值
progressbarOne['value'] = 20
# 横排 长度200 起点移至终点
progressbarTwo = tkinter.ttk.Progressbar(root, orient=tkinter.HORIZONTAL, length=200, mode='determinate')
progressbarTwo.pack(pady=20)
# 进度值最大值
progressbarTwo['maximum'] = 100
# 进度值初始值
progressbarTwo['value'] = 80
root.mainloop()
运行结果:
注意:现在进度条还不能动!
Progressbar 动画设计
如果想要设计含动画效果的Progressbar,可以在每次更新Progressbar 对象的value值时调用update()
方法,这时窗口可以依据value值重绘,这样就可以达到动画效果
例子:
import time
import tkinter
import tkinter.ttk
def show():
for i in range(100):
# 每次更新加1
progressbarOne['value'] = i + 1
# 更新画面
root.update()
time.sleep(0.05)
root = tkinter.Tk()
root.geometry('150x120')
progressbarOne = tkinter.ttk.Progressbar(root)
progressbarOne.pack(pady=20)
# 进度值最大值
progressbarOne['maximum'] = 100
# 进度值初始值
progressbarOne['value'] = 0
button = tkinter.Button(root, text='Running', command=show)
button.pack(pady=5)
root.mainloop()
运行结果:
例子:
模拟真实下载,下载总量是10000B, 每次下载500B
def show():
# 设置进度条的目前值
progressbarOne['value'] = 0
# 设置进度条的最大值
progressbarOne['maximum'] = maxbyte
# 调用loading方法
loading()
def loading():
# 改变变量属性
global byte
# 每次运行500B
byte += 500
# 设置指针
progressbarOne['value'] = byte
if byte < maxbyte:
# 经过100ms后再次调用loading方法
progressbarOne.after(100, loading)
root = tkinter.Tk()
root.geometry('150x120')
# 设置下载初值
byte = 0
# 设置下载最大值
maxbyte = 10000
progressbarOne = tkinter.ttk.Progressbar(root)
progressbarOne.pack(pady=20)
button = tkinter.Button(root, text='Running', command=show)
button.pack(pady=5)
root.mainloop()
运行结果:
Progressbar 的方法 start()/step()/stop()
含义如下:
start(interval)
:每隔interval时间移动一次指针。interval的默认值是50ms,每次移动指针调用一次step(amount)。在step()方法内的amount参数意义就是增值量step(amount)
:每次增加一次amount,默认值是1.0,在determinate模式下,指针不会超过maximum参数。在indeterminate模式下,当指针达到maximum参数值的前一格时,指针会回到起点stop()
:停止start()运行
例子:
import time
import tkinter
import tkinter.ttk
def show():
while progressbarOne.cget('value') <= progressbarOne['maximum']:
progressbarOne.step(2)
root.update()
print(progressbarOne.cget('value'))
time.sleep(0.05)
root = tkinter.Tk()
root.geometry('150x120')
progressbarOne = tkinter.ttk.Progressbar(root, length=200, mode='determinate', orient=tkinter.HORIZONTAL)
progressbarOne.pack(pady=20)
progressbarOne['maximum'] = 100
progressbarOne['value'] = 0
button = tkinter.Button(root, text='Running', command=show)
button.pack(pady=5)
root.mainloop()
运行结果:
使用start()方法启动动画,单击stop按钮停止
例子:
import tkinter
import tkinter.ttk
def run():
progressbarOne.start()
def stop():
progressbarOne.stop()
root = tkinter.Tk()
root.geometry('150x120')
progressbarOne = tkinter.ttk.Progressbar(root, length=200, mode='determinate', orient=tkinter.HORIZONTAL)
progressbarOne.pack(padx=5, pady=10)
progressbarOne['maximum'] = 100
progressbarOne['value'] = 0
buttonRun = tkinter.Button(root, text='Run', width=6, command=run)
buttonRun.pack(padx=10, pady=5, side=tkinter.LEFT)
buttonStop = tkinter.Button(root, text='Stop', width=6, command=stop)
buttonStop.pack(padx=10, pady=5, side=tkinter.RIGHT)
root.mainloop()
运行结果:
indeterminate 模式
在这个模式下指针将左右移动,主要目的是让用户知道程序仍然在继续工作
例子:
progressbarOne = tkinter.ttk.Progressbar(root, length=200, mode='indeterminate', orient=tkinter.HORIZONTAL)
运行结果:
来源:https://blog.csdn.net/qq_44168690/article/details/105092516
猜你喜欢
- 1、DjangoDjango可能是最具代表性的Python框架,是遵循MMVC结构模式的开源框架。其名字来自DjangoReinhardt,
- Python中实现socket通信的服务端比较复杂,而客户端非常简单,所以客户端基本上都是用sockct模块实现,而服务 端用有很多模块可以
- 前2种方法主要用到了列表解析,性能稍差,而最后一种使用的时候生成器表达式,相比列表解析,更省内存列表解析和生成器表达式很相似:列表解析[ex
- 【原文地址】New C# "Orcas" Language Features: Automatic Properties
- PDO::inTransactionPDO::inTransaction — 检查是否在一个事务内(PHP 5 >= 5.3.3, B
- Django 基本命令本节主要是为了让您了解一些django最基本的命令,请尝试着记住它们,并且多多练习下1. 新建一个 django pr
- python os.stat()获取相关文件的系统状态信息stat 系统调用时用来返回相关文件的系统状态信息的。下面直接以一个具体示例来进行
- 简述和GNU一样,YAML是一个递归着说“不”的名字。不同的是,GNU对UNIX说不,YAML说不的对象是XML。YAML不是XML。为什么
- 我正在参加天池上的一个竞赛,刚开始用的是DenseNet121但是效果没有达到预期,因此开始尝试使用模型融合,将Desenet和Xcepti
- anaconda指的是一个开源的Python
- 本文实例讲述了python中list循环语句用法。分享给大家供大家参考。具体用法分析如下:Python 的强大特性之一就是其对 list 的
- 目录1、正则表达式1.1 正则表达式字符串1.1.1 元字符1.1.2 字符转义1.1.3 开始与结束字符1.2 字符类1.2.1 定义字符
- 当程序出现错误时,系统会自动引发异常。除此之外,Python 也允许程序自行引发异常,自行引发异常使用 raise 语句来完成。很多时候,系
- 在django操作数据库的时候如何找出内容不为空的数据呢?from django.db.models import Qclass Index
- 开始第一篇。老规矩,先无聊的谈论天气一类的话题。十一长假,天气也终于开始有些秋天的味道,坐在屋里甚至觉得需要热咖啡。话说两年前也是在国庆假期
- 上次学会了爬取图片,这次就想着试试爬取商家的联系电话,当然,这里纯属个人技术学习,爬取过后及时删除,不得用于其它违法用途,一切后果自负。首先
- 一、Python官方标准库:Tkinter (必须了解)Python内置图形界面库——Tkinter
- 一、初识正则表达式正则表达式 是一个特殊的字符序列,一个字符串是否与我们所设定的这样的字符序列,相匹配快速检索文本、实现替换文本的操作jso
- python-try-except:pass用法1.为了跳过for循环里的某次循环以下代码当某次循环发生错误时,执行except代码块,co
- 在对跨多个表格的数据进行组合时,有时很难搞清楚要使用哪一个SQL句法。我将在这里对将多个表格中的查询合并至单一声明中的常用方式进行阐述。在这