用python中的tkinter包实现进度条
python中的tkinter包是一种常见的设计程序的GUI界面用的包。本文主要介绍这里面的一个组件:进度条(Progressbar)。Tkinter Progressbar里面对进度条组件已经做了一定的介绍,但比较抽象。本文以另一种方式介绍这个组件及其常用用法。
一、进度条的基本概念
进度条组件涉及多个基本概念,但本文主要介绍几个最重要的概念。而至于其它概念,多半只是涉及一些细节优化。
(一)进度条模式
tkinter支持两种模式的进度条:
1. determinate模式
这种模式的进度条通常是这样的:

也就是说,这样的进度条适用于任务的完成进度明确,且可以量化的情况。
2. indeterminate模式
这种模式的进度条通常是这样的:

也就是说,这样的进度条适用于任务的完成进度不明确或无法量化的情况。进度条的滚动只能表示任务正在运行中,无法表示任务完成了多少。
(二)进度条绑定的变量
进度条组件通常要绑定一个数值型变量,如Int或Double,这个变量存放进度条的进度数值。
对于determinate模式下的进度条,数值通常从0开始,随着进度的发展不断升高(如何升高将在下一节进行说明),但到达99后,继续升高将清零,重新从0开始。也就是说,如果进度量是,那么该数值变量的值是
。(
表示取余)但数值可以手动调为100,此时进度条满格。
对于indeterminate模式下的进度条,数值通常从0开始,随着进度的发展不断升高,没有止境。
以上是对基本概念的介绍。下面贴上进度条组件相关的代码进行进一步说明。
prgVar = DoubleVar(value=0)
prgb = ttk.Progressbar(root, orient='horizontal', length=200, mode='determinate', variable=prgVar)
prgb.grid(row=0, columnspan=4)
在对象prgb里,variable参数对应的变量是prgVar,所以prgVar是进度条组件prgb绑定的变量。这个组件的模式是determinate。
用一个标签组件(Label)显示该变量的数值。
labl = Label(root, textvariable=prgVar)
labl.grid(row=2, columnspan=4)
效果如下:

如动画中所示,变量值到达99后退回了0,重新开始。
但如果是indeterminate模式,则是另一种情况。
prgbInfVar = IntVar(value=0)
prgbInf = ttk.Progressbar(root, orient="horizontal", length=200, mode='indeterminate', variable=prgbInfVar)
prgbInf.grid(row=3, columnspan=4)
lablInf = Label(root, textvariable=prgbInfVar)
lablInf.grid(row=5, columnspan=4)
效果如下:

如动画中所示,变量值一直在不断增加。
(三)进度条的动作
前面所示的那些动画中,进度条都是以一个速度在递进,数值也在增加。当然,进度条的数值可以通过人工调整其对应变量的值来设置,进度条的显示也会随数值而变化。
例如,要把determinate的进度条清空,只需将进度条绑定的变量值设为0即可。
prgVar.set(0)
此时进度条变空。

于此同时,进度条有start,step,以及stop三个常用动作。
prgb.start(p)
prgb.step(x)
prgb.stop()
以上三行代码,分别表示:
1. 进度条prgb开始自动递增,每隔p毫秒递增1。
2. 进度条prgb一次性递增x。该动作和进度条当前是否在自动递增无关,执行后也不会影响进度条是否继续自动递增。
3. 进度条prgb停止自动递增。注意该动作并不自动将进度条清零。
注意:若进度条的模式是determinate,以上动作执行时仍然遵守进度条变量超过99清零的规则。
二、程序示例
现在用一个例子来帮助读者复习进度条的相关知识。
有很多人在设计程序时,希望实现这样的显示:
当任务尚未开始时,进度条应为空
![]()
当任务正在进行时,由于任务的进度无法确认或量化,只能用indeterminate模式的进度条表示
![]()
当任务失败时,进度条回到空的状态。但当任务完成时,进度条应为满
![]()
这样的逻辑如何实现呢?对于indeterminate模式下的进度条,无论绑定的变量值为多少,都不可能实现进度条为空或满的显示。
此时,就需要将进度条的模式转变为determinate
prgbInf['mode'] = 'determinate'
在这里设计一个程序,实现这样的逻辑:

完整的代码:
from tkinter import *
from tkinter import ttkroot = Tk()
root.geometry('250x250')
root.title('Progress bar')def startProgress():prgb.start(100) #increment 1 per 100ms#labl['text'] = prgb['value']
def stepProgress():prgb.step(20) #increment 20#labl['text'] = prgb['value']
def stopProgress():prgb.stop()#labl['text'] = prgb['value']
def clearProgress():prgVar.set(0)def startProgressInf():prgbInf['mode'] = 'indeterminate'prgbInf.start(30) #increment 1 per 100ms#labl['text'] = prgb['value']
def finishProgressInf():prgbInfVar.set(100)prgbInf.stop()prgbInf['mode'] = 'determinate'#labl['text'] = prgb['value']
def stopProgressInf():prgbInf['mode'] = 'indeterminate'prgbInf.stop()#labl['text'] = prgb['value']
def clearProgressInf():prgbInfVar.set(0)prgbInf.stop()prgbInf['mode'] = 'determinate'prgVar = DoubleVar(value=0)
prgb = ttk.Progressbar(root, orient='horizontal', length=200, mode='determinate', variable=prgVar) #If progress bar has determined progress value, then use this
prgb.grid(row=0, columnspan=4)btStart = Button(root, text="Start", command=startProgress)
btStart.grid(row=1, column=0)
btStep = Button(root, text="Step", command=stepProgress)
btStep.grid(row=1, column=1)
btStop = Button(root, text="Stop", command=stopProgress)
btStop.grid(row=1, column=2)
btClear = Button(root, text="Clear", command=clearProgress)
btClear.grid(row=1, column=3)labl = Label(root, textvariable=prgVar)
labl.grid(row=2, columnspan=4)prgbInfVar = IntVar(value=0)
prgbInf = ttk.Progressbar(root, orient="horizontal", length=200, mode='indeterminate', variable=prgbInfVar)
prgbInf.grid(row=3, columnspan=4)btStartInf = Button(root, text="Start", command=startProgressInf)
btStartInf.grid(row=4, column=0)
btFinishInf = Button(root, text="Finish", command=finishProgressInf)
btFinishInf.grid(row=4, column=1)
btStopInf = Button(root, text="Stop", command=stopProgressInf)
btStopInf.grid(row=4, column=2)
btClearInf = Button(root, text="Clear", command=clearProgressInf)
btClearInf.grid(row=4, column=3)lablInf = Label(root, textvariable=prgbInfVar)
lablInf.grid(row=5, columnspan=4)#So, firstly, start, stop, step works for both determinate progress bar and indeterminate progress bar
#secondly, for determinate progress bar the value loops from 0 to 100, reset when full
#but for indeterminate progress bar, the value keeps increasing.root.mainloop()
在这个程序里,btStartInf按钮实现了任务正在进行时的进度条,btClearInf按钮实现了任务失败的进度条,btFinishInf按钮实现了任务完成的进度条。具体实现方式,见按钮对应的函数。
相关文章:
用python中的tkinter包实现进度条
python中的tkinter包是一种常见的设计程序的GUI界面用的包。本文主要介绍这里面的一个组件:进度条(Progressbar)。Tkinter Progressbar里面对进度条组件已经做了一定的介绍,但比较抽象。本文以另一种方式介绍这个组件及其常用用法…...
oneplus3t-lineageos-16.1编译-android9
本仓库开发已经完毕,使用请直接从4.2开始 ** LineageOS16_oneplus3t仓库群克隆 、 编译 、 刷机** 编译过程若ctrlc强制终止,请重新从头编译 LineageOS16_oneplus3t仓库群克隆过程 LineageOS16_oneplus3t仓库群克隆过程描述: LineageOS16_oneplus3t_gitRepoLs_c…...
VSCode+ESP-IDF开发ESP32-S3-DevKitC-1(1)开发环境搭建
VSCodeESP-IDF开发ESP32-S3-DevKitC-1(1)开发环境搭建 1.开发环境搭建(安装ESP-IDF)2.开发环境搭建(安装VS Code)3.开发环境搭建(VSCode中安装ESP-IDF插件及配置) 1.开发环境搭建&am…...
LeetCode --- 143周赛
题目列表 3345. 最小可整除数位乘积 I 3346. 执行操作后元素的最高频率 I 3347. 执行操作后元素的最高频率 II 3348. 最小可整除数位乘积 II 一、最小可整除数位成绩I 由于本题的数据范围比较小,我们直接暴力枚举即可,代码如下 class Solution { p…...
[AI] 【提高认知】自动翻译技术的演变:从规则系统到深度学习的崛起
机器自动翻译 (MT) 是人工智能历史上最早的应用之一,尤其是在英语和俄语之间的翻译应用。自诞生以来,自动翻译技术从符号系统逐步演化到依赖大数据和深度学习的先进模型。本文将深入探讨机器翻译的早期方法、统计方法和现代神经网络方法的演变过程,帮助大家了解自动翻译技术…...
python机器人Agent编程——多Agent框架的底层逻辑(上)
目录 一、前言二、两个核心概念2.1 Routines(1)清晰的Prompt(2)工具调用json schema自动生成(3)解析模型的toolcall指令(4)单Agent的循环决策与输出 PS.扩展阅读ps1.六自由度机器人相…...
渑池县中药材产业党委莅临河南广宇企业管理集团有限公司参观交流
11月14日,渑池县人大副主任、工商联主席杨航率县中药材产业党委代表团一行13人,莅临河南广宇集团参观交流。河南广宇集团总经理王峰、副总经理王培等领导热情接待并陪同参观、座谈。 代表团一行首先参观了集团旗下郑州美信中医院(庚贤堂中医药…...
学习日志011--模块,迭代器与生成器,正则表达式
一、python模块 在之前学习c语言时,我们学了分文件编辑,那么在python中是否存在类似的编写方式?答案是肯定的。python中同样可以实现分文件编辑。甚至还有更多的好处: 提高代码的可维护性:当代码被分成多个文件时…...
ChatGPT 搜索 vs Google 搜索
原文:Amanda Caswell - 2024.11.01 随着 OpenAI 推出的实时搜索功能,ChatGPT 正在逐步成为像 Google 这样的传统搜索引擎的竞争对手。ChatGPT 以其对话式的回答方式而闻名,它能够在没有广告干扰的情况下提供实时的上下文信息。 我迫不及待地…...
一文简单了解Android中的input流程
在 Android 中,输入事件(例如触摸、按键)从硬件传递到应用程序并最终由应用层消费。整个过程涉及多个系统层次,包括硬件层、Linux 内核、Native 层、Framework 层和应用层。我们将深入解析这一流程,并结合代码逐步了解…...
【MySQL】SQL语言
【MySQL】SQL语言 文章目录 【MySQL】SQL语言前言一、SQL的通用语法二、SQL的分类三、SQLDDLDMLDQLDCL 总结 前言 本篇文章将讲到SQL语言,包括SQL的通用语法,SQL的分类,以及SQL语言的DDL,DML,DQL,DCL。 一、SQL的通用语法 在学习具体的SQL语句之前,先来…...
5.4.2-1 编写Java程序在HDFS上创建文件
本次实战涉及使用Java操作Hadoop HDFS,包括创建文件、判断文件存在性及异常处理。通过手动添加依赖、启动HDFS服务,成功在HDFS上创建和检查文件。进一步探索了文件操作的最佳实践,如检查文件存在性以避免重复创建,以及处理HDFS安全…...
The 3rd Universal CupStage 15: Chengdu, November 2-3, 2024(2024ICPC 成都)
Problem L. Recover Statistics 题目意思: 给定a, b, c三个值,确保构造的数列中包含满足题目的数量 解题思路: 100 中 选择a 50个, b45个, c4个。 #include <iostream>using namespace std;using ll long …...
显示微服务间feign调用的日志
第一步 package com.niuniu.common.config;import com.niuniu.common.CommonConstant; import com.niuniu.common.utils.UserContext; import feign.Logger; import feign.RequestInterceptor; import feign.RequestTemplate; import org.springframework.context.annotation.…...
SOHO场景开局(小型,多子网):AP+管理型交换机+路由器+光猫
业务需求 1. 实现除光猫外,整网设备通过APP进行开局,开局部署完成后,能够通过APP远程运维。 2. 需要单独划分访客、办公、视频监控3个子网,其中访客子网供顾客无线上网使用,办公子网用于接入无线和有线办公终端&#x…...
Android - Pixel 6a 手机OS 由 Android 15 降级到 Android 14 操作记录
Pixel 6a 手机由 Android 14 升级到 Android 15了,但是由于一些原因又想降级回 Android 14, 能降吗?该怎么降级呢?本篇文章来记述实际操作过程,希望能给想做相同操作的人一些帮助。 答案当然是能降,而且我…...
linux系统kkFileView 配置https预览文件
思路: 1.kkfile的 context全局路径可以修改 context-path,比如:server.servlet.context-path 2.使用nginx反向代理 /kkfile 转发到 kkfile路径上 官网教程 kkFileView - 在线文件预览 1、配置config/application.properties. server.se…...
stm32——通用定时器时钟知识点
(该图来自小破站 铁头山羊老师的stm32标准库教学)...
前端无感刷新token
摘要: Axios 无感知刷新令牌是一种在前端应用中实现自动刷新访问令牌(access token)的技术,确保用户在进行 API 请求时不会因为令牌过期而中断操作 目录概览 XMLHttpRequestAxiosFetch APIJQuni.request注意事项: 访问…...
针对股票评论的情感分类器
🏡作者主页:点击! 🤖编程探索专栏:点击! ⏰️创作时间:2024年11月16日13点39分 神秘男子影, 秘而不宣藏。 泣意深不见, 男子自持重, 子夜独自沉。 论文链接 点击开启你的论文编程之旅…...
tkinter表格神器tkintertable实战:5分钟搞定可拖拽编辑的数据表格(附完整代码)
tkinter表格神器tkintertable实战:5分钟搞定可拖拽编辑的数据表格(附完整代码) 在Python GUI开发中,表格控件一直是刚需但实现起来又颇为棘手的组件。传统tkinter自带的Treeview虽然能勉强实现表格功能,但在交互体验上…...
UE5场景过曝/白屏排查指南:从后期处理体积到项目设置的实战修复
1. 当UE5场景变成"雪盲症"时该怎么办? 第一次打开UE5项目看到白茫茫一片的时候,我差点以为显卡烧了。这种场景过曝现象就像在雪山没戴墨镜,所有细节都被强光吞噬。新手遇到这种情况别慌,我整理了从"急救措施"…...
OpenClaw调试技巧:Qwen3-32B任务失败排查手册
OpenClaw调试技巧:Qwen3-32B任务失败排查手册 1. 为什么需要这份手册? 上周我尝试用OpenClaw自动整理项目文档时,遇到了一个诡异现象:同样的任务在白天能顺利完成,深夜运行时却频繁报错。经过72小时的问题追踪&#…...
7大核心优势!Windows环境PM2服务化终极解决方案:从痛点到实战的完整指南
7大核心优势!Windows环境PM2服务化终极解决方案:从痛点到实战的完整指南 【免费下载链接】pm2-installer Install PM2 offline as a service on Windows or Linux. Mostly designed for Windows. 项目地址: https://gitcode.com/gh_mirrors/pm/pm2-ins…...
别再乱选了!Ansys EDA桌面版导入IBIS模型,Pin Import和Buffer Import到底怎么用?
Ansys EDA桌面版IBIS模型导入指南:Pin Import与Buffer Import深度解析 在信号完整性(SI)和电源完整性(PI)仿真领域,IBIS模型的使用一直是工程师们关注的焦点。作为行业标准的Ansys EDA工具链(原E-desktop)提供了强大的SIPI仿真能…...
AutoUnipus:重新定义U校园学习效率的智能解决方案
AutoUnipus:重新定义U校园学习效率的智能解决方案 【免费下载链接】AutoUnipus U校园脚本,支持全自动答题,百分百正确 2024最新版 项目地址: https://gitcode.com/gh_mirrors/au/AutoUnipus 还在为U校园平台上堆积如山的网课任务而焦虑吗?每天花费…...
80+经典游戏宽屏焕新:WidescreenFixesPack重塑怀旧体验
80经典游戏宽屏焕新:WidescreenFixesPack重塑怀旧体验 【免费下载链接】WidescreenFixesPack Plugins to make or improve widescreen resolutions support in games, add more features and fix bugs. 项目地址: https://gitcode.com/gh_mirrors/wi/WidescreenFi…...
4步攻克Python代码执行可视化:开发者调试效率提升指南
4步攻克Python代码执行可视化:开发者调试效率提升指南 【免费下载链接】viztracer VizTracer is a low-overhead logging/debugging/profiling tool that can trace and visualize your python code execution. 项目地址: https://gitcode.com/gh_mirrors/vi/vizt…...
为什么你的Mojo-Python FFI在M1芯片上必崩?苹果Silicon专属ABI陷阱与跨架构符号绑定修复指南(含Clang插件源码)
第一章:为什么你的Mojo-Python FFI在M1芯片上必崩?Mojo-Python FFI(Foreign Function Interface)在 Apple M1 及后续 ARM64 架构芯片上崩溃,根源并非配置疏忽,而是底层 ABI 不兼容与运行时符号解析机制的双…...
Ubuntu 20.04 + ROS Noetic 下,3DSystems Touch HID 新版设备(单USB口)保姆级配置避坑指南
Ubuntu 20.04 ROS Noetic 下3DSystems Touch HID新版设备终极配置指南 刚拿到2024年新款3DSystems Touch HID设备的开发者们,是否被网上混杂的老旧教程搞得晕头转向?作为一款专业级力反馈设备,Touch在机器人控制和VR/AR开发中有着不可替代的…...
