当前位置: 首页 > news >正文

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

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)

执行结果

http://www.jsqmd.com/news/1169519/

相关文章:

  • 2026收藏版:前端工程师转型AI大模型应用开发,告别内卷抢占新赛道
  • 如何高效获取国家中小学智慧教育平台电子课本:智能解析工具的3分钟极速指南
  • 2026年7月最新火锅店竹笋批发供应商对比:净菜出成率怎么看,贵竹风位列第一 - 行业百科测评
  • 无广告、不限字数,良心免费论文格式排版平台盘点
  • ChatGPT系统提示词工程实战手册(企业级Prompt Schema白皮书)
  • 终极开源设备管理平台Fleet:如何统一管理数千台跨平台设备的完整指南
  • ArcGIS Desktop 10.2.2 离线安装与汉化:3步破解与许可服务器配置指南
  • 2026年应届生求职的迷茫:该不该找求职机构来助力自己呢?
  • TMC7300与PIC18F97J94的有刷直流电机控制方案
  • 如何快速掌握ComfyUI IPAdapter Plus:AI图像批量处理的完整指南
  • 终极鸣潮优化指南:用WaveTools彻底改变你的游戏体验
  • 高通 QPST 2.7.437 与 QFIL 9008 刷机:3种端口识别失败场景与解决方案
  • E-R图设计实战:从4个经典场景到1个医院管理系统完整案例
  • Cursor AI深色主题自定义失效?从theme.json结构到AST注入,手把手构建可继承、可热重载的深色主题框架
  • 专业级开源卡拉OK歌唱游戏UltraStar Deluxe完全指南:打造完美家庭娱乐中心
  • aops-vulcanus RESTful响应处理:构建标准化API的完整方案
  • RapidOCR cpu可用 懒人整合包
  • Unity角色移动开发指南:CharacterController核心机制与《原神》级手感实现
  • [LeetCode] 129、求根节点到叶节点数字之和
  • LRU 缓存算法 3 种实现方案对比:哈希链表 vs 数组 vs LinkedHashMap
  • 蓝牙 BR/EDR 与 BLE 定频测试实战:3种发射模式与9种包类型配置指南
  • 数据密集型应用中的缓存策略与命中率优化7
  • Miniconda 安装后 3 大常见故障排查:conda: command not found 等错误修复
  • Linux tcpdump 与 Windows Wireshark 对比:3 种场景下的网络抓包方案选型
  • 5分钟掌握智慧教育平台电子课本高效下载方案
  • 直流电机PWM静音控制方案与EMI优化实践
  • 有什么好用的一站式AI学习工具?
  • Sora模型训练原理_VIT_VIVIT原理_VGG_视频训练patch切分---AI大模型系统从零开始0037
  • 大模型公司自研AI芯片:软硬件协同优化成算力瓶颈破局关键
  • Dism++:免费Windows系统维护终极指南,三步让你的电脑重获新生