热文:Python之tkinter进度条Progressbar用法解读
目录
Progressbar 基本概念基本应用Progressbar 动画设计Progressbar 的方法 start()/step()/stop()indeterminate 模式总结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)
运行结果:
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
关键词:
下一篇:最后一页
X 关闭
X 关闭
- 15G资费不大降!三大运营商谁提供的5G网速最快?中国信通院给出答案
- 2联想拯救者Y70发布最新预告:售价2970元起 迄今最便宜的骁龙8+旗舰
- 3亚马逊开始大规模推广掌纹支付技术 顾客可使用“挥手付”结账
- 4现代和起亚上半年出口20万辆新能源汽车同比增长30.6%
- 5如何让居民5分钟使用到各种设施?沙特“线性城市”来了
- 6AMD实现连续8个季度的增长 季度营收首次突破60亿美元利润更是翻倍
- 7转转集团发布2022年二季度手机行情报告:二手市场“飘香”
- 8充电宝100Wh等于多少毫安?铁路旅客禁止、限制携带和托运物品目录
- 9好消息!京东与腾讯续签三年战略合作协议 加强技术创新与供应链服务
- 10名创优品拟通过香港IPO全球发售4100万股 全球发售所得款项有什么用处?

