尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

Tkinter库的学习记录15-进度条Progressbar

Tkinter库的学习记录15-进度条Progressbar
📅 发布时间:2026/7/11 20:30:45

15、进度条Progressbar

15-1 Progressbar的基本使用

Progressbar可以解释为进度条,主要是当作一个工作进度指针,在这个控件中会有一个指针,由此指针可以了解工作进度,例如,档案下载、档案解压缩等。用户可以由这个工作进度指针确认系统仍在进行中,同时也可以了解目前进行到哪一个阶段。

它的构造方法语法如下。

Progressbar(父对象, options, ...)

参数一:同上。

options参数:

(1) length:进度条的长度,默认是100像素。

(2) mode:可以有下列两种模式。

①daterminate:一个指针会从起点移至终点,通常当我们知道所需工作时间时,可以使用此模式,这是默认模式。

②indeterminate:一个指针会在起点和重点间来回移动,通常当我们不知道工作所需时间时,可以使用此模式。

(3) maximum:进度条的最大值,默认是100。

(4) name:进度条的名称,供程序参考引用。

(5) orient:进度条的方向,可以是HORIZONTAL(默认)或VERTICAL。

(6) value:进度条的目前值。

(7) variable:记录进度条目前的进度值。

下面程序实例:进度条最大值是100,列出目前值是50的界面。其中一个进度条大部分参数使用默认值,另一个则是使用自定义方式。

from tkinter import * from tkinter.ttk import * root = Tk() root.title("ch15_1") root.geometry("300x140") # 使用默认创建进度条 pb1 = Progressbar(root) pb1.pack() pb1["maximum"] = 100 pb1["value"] = 50 # 使用各参数自定义方式创建进度条 pb2 = Progressbar(root, orient=HORIZONTAL, length=200, mode="determinate") pb2.pack(pady=20) pb2["maximum"] = 100 pb2["value"] = 50 root.mainloop()

执行结果

15-2 Progressbar动画设计

如果想要设计含动画效果的Progressbar,可以在每次更新Progressbar对象的value值时调用update()方法,这时窗口可以依据value值重绘,这样就可以达到动画效果。

下面程序实例ch15_2,设计带动画效果的Progressbar,最大值是100,从0开始,每隔0.05s可以移动一格。

from tkinter import * from tkinter.ttk import * import time def running(): for i in range(100): pb["value"] = i + 1 root.update() # 更新画面 time.sleep(0.05) root = Tk() root.title("ch15_2") root.geometry("300x140") pb = Progressbar(root, orient=HORIZONTAL, length=200, mode="determinate") pb.pack(padx=10, pady=10) pb["maximum"] = 100 pb["value"] = 0 btn = Button(root, text="Running", command=running) btn.pack(pady=10) root.mainloop()

执行结果

假设我们在设计下载资料的Progressbar,在真实的应用中,可以将所获得的档案大小当作Progressbar对象maximum参数的值,然后设置每次读取数据数量(下载量),只要总下载量小于maximum,则继续下载。

下面是模拟下载的Progressbar设计,假设下载总量是10000B,每次读取数据数量(下载量)是500B。

from tkinter import * from tkinter.ttk import * import time def load(): pb["value"] = 0 # 重置进度条 pb["maximum"] = maxbytes loading() def loading(): global bytes bytes += 500 pb["value"] = bytes if bytes < maxbytes: pb.after(50, loading) root = Tk() root.title("ch15_3") bytes = 0 # 设置初值 maxbytes = 10000 # 假设下载文件大小 pb = Progressbar(root, orient=HORIZONTAL, length=200, mode="determinate") pb.pack(padx=10, pady=10) pb["value"] = 0 btn = Button(root, text="Load", command=load) btn.pack(pady=10) root.mainloop()

执行结果

15-3 Progressbar的方法start()/step()/stop()

这几个方法的含义如下。

(1) start(interval):每隔interval时间移动一次指针。interval的默认值是50ms,每次指针移动调用一次step(delta)。在step()方法内的delta参数的意义是增值量。

(2) step(delta):每次增加一次delta,默认值是1.0,在determinate模式,指针不会超过maximum参数值。在indeterminate模式,当指针达到maximum参数值的前一格时,指针会回到起点。

(3) stop():停止start()的运行。

下面程序实例:验证使用step(2)方法,相当于每次增值2,当指针到达末端值100前一格时(相当于是98),指针会回到0,然后重新开始移动。这个程序执行时同时在Python Shell窗口会列出目前指针的值。

from tkinter import * from tkinter.ttk import * import time def running(): while pb.cget("value") <= pb["maximum"]: pb.step(2) root.update() # 更新画面 print(pb.cget("value")) # 打印指针值 time.sleep(0.05) root = Tk() root.title("ch15_4") pb = Progressbar(root, orient=HORIZONTAL, length=200, mode="determinate") pb.pack(padx=10, pady=10) pb["maximum"] = 100 pb["value"] = 0 btn = Button(root, text="Running", command=running) btn.pack(pady=10) root.mainloop()

执行结果

下面程序实例ch15_5:使用start()方法启动Progressbar的动画,当单击gressbar的动画,当单击Stop按钮后才可中止此动画。

from tkinter import * from tkinter.ttk import * import time def run(): pb.start() def stop(): pb.stop() root = Tk() root.title("ch15_4") pb = Progressbar(root, orient=HORIZONTAL, length=200, mode="determinate") pb.pack(padx=10, pady=10) pb["maximum"] = 100 pb["value"] = 0 btnRun = Button(root, text="Run", command=run) btnRun.pack(side=LEFT, padx=5, pady=10) btnStop = Button(root, text="Stop", command=stop) btnStop.pack(side=LEFT, padx=5, pady=10) root.mainloop()

执行结果

15-4 indeterminate模式

在这个模式下指针将左右移动,主要目的是让用户知道程序仍在继续工作。

下面程序实例ch15_6:将Progressbar的模式设为indeterminate,重新设计ch15_5,这个程序在执行时可以看到指针左右移动,若是单击Stop按钮可以可以中止指针移动。

pb = Progressbar(root, length=200, mode="indeterminate", orient=HORIZONTAL)

执行结果

相关新闻

  • Apollo Save Tool:终极免费的PS4存档管理解决方案,轻松掌控游戏进度
  • 2026年7月最新火锅店竹笋批发供应商对比:净菜出成率怎么看,贵竹风位列第一 - 行业百科测评
  • 如何高效获取国家中小学智慧教育平台电子课本:智能解析工具的3分钟极速指南

最新新闻

  • 操作系统分页存储实战:3种地址转换算法详解与10道真题精解
  • ChatGPT-o1推理模型:为什么你的“思考时间”比OpenAI官方文档多出2.7倍?——揭秘推理阶段token生成非线性放大效应与温度系数漂移补偿法
  • AI工具自助服务模式的技术实现与200美元/月定价策略分析
  • 终极Windows 11优化指南:用Win11Debloat让你的系统重获新生
  • 生命涌现的小龙虾技能之【Elderly Hand Resting-Tremor Detection | 老年人手部震颤(静止性)识别】简介
  • AtomGit Flutter 鸿蒙客户端:表单编辑与数据回填

日新闻

  • OpenClaw本地部署:一键直连微信的私有化AI Agent实战指南
  • Kubernetes 系列【10】控制器:ReplicaSet(副本集)
  • 怎么寄快递才能便宜呢?2026年7月寄快递省钱攻略 - 生活情报姬

周新闻

  • 基于YOLOv12的番茄成熟度智能检测系统开发
  • 终极RimWorld模组管理指南:用RimSort告别模组冲突烦恼
  • AI Agent框架开发:从理论到实践的完整指南

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号