Python tkinter ttk Progressbar 进度条控件详解:属性、模式与函数用法

凌晨两点半
凌晨两点半
发布时间:2026-10-14 | 2人浏览过
原创

本文详细介绍Python tkinter中ttk.Progressbar控件的使用方法。涵盖cursor、length、maximum等关键属性配置,解析determinate(确定模式)与indeterminate(不确定模式)的区别及应用场景,并演示start、step、stop函数的具体调用方式与参数设置,帮助开发者实现精准的进度反馈。

进度条的核心功能是向用户反馈任务执行状态,主要包含两种表现形式:第一种是明确提示完成百分比,例如软件安装过程中从0%递增至100%的进度展示。

第二种形式用于提示任务正在进行中,但无法预估具体完成时间。此类进度条通常表现为来回往复移动的光标或条状动画,旨在告知用户系统正在处理数据,而非展示具体的完成度。需要注意的是,进度条控件定义在ttk模块中,使用前必须显式导入该模块。

1 属性

属性 描述
cursor 鼠标位于进度条内时的形状
length 进度条长度
maximum 进度条最大刻度值
mode 进度条的模式。有两种:‘determinate'和'indeterminate'
orient 进度条的方向,有HORIZONTAL 和VERTICAL两种
style 定义进度条的外观
takefocus 是否可以通过Tab获得输入焦点
variable 与进度条关联的变量。可以设置或获得进度条的当前值
value 设置或者获取进度条的当前值

1.1 cursor

该属性用于定义鼠标悬停在进度条区域时的光标形状。关于具体支持的光标样式列表,请参考文档3.3.6节。


import tkinter as tk
from tkinter import ttk
import time 
def increment(*args):
    for i in range(100):
        p1["value"] = i+1
        root.update()
        time.sleep(0.1)
root = tk.Tk()
root.geometry('320x240')
p1 = ttk.Progressbar(root, length=200,cursor='spider',
                     mode="determinate",
                     orient=tk.HORIZONTAL)
p1.grid(row=1,column=1)
btn = ttk.Button(root,text="Start",command=increment)
btn.grid(row=1,column=0)
root.mainloop()

运行结果示例见下图:

1.2 length

用于设定进度条的显示长度。默认单位默认为像素(pixels),但支持其他长度单位,具体单位规范详见3.3.1节。


import tkinter as tk
from tkinter import ttk
import time 
def increment(*args):
    for i in range(100):
        p1["value"] = i+1
        root.update()
        time.sleep(0.1)
root = tk.Tk()
root.geometry('360x240')
p1 = ttk.Progressbar(root, length='2i', mode="determinate",
                     orient=tk.HORIZONTAL)
p1.grid(row=1,column=1)
btn = ttk.Button(root,text="Start",command=increment)
btn.grid(row=1,column=0)
root.mainloop()

示例说明:若设置长度为'2i',则表示进度条物理长度为2英寸。

1.3 maximum

该属性定义进度条的最大刻度值,默认值为100。


import tkinter as tk
from tkinter import ttk
import time 
def increment(*args):
    for i in range(100):
        p1["value"] = i+1
        root.update()
        time.sleep(0.1)
root = tk.Tk()
root.geometry('320x240')
p1 = ttk.Progressbar(root, length=200, mode="determinate",
                     maximum=200,orient=tk.HORIZONTAL)
p1.grid(row=1,column=1)
btn = ttk.Button(root,text="Start",command=increment)
btn.grid(row=1,column=0)
root.mainloop()

运行结果示例见下图:


示例说明:当进度条的最大刻度(maximum)被设置为200,而increment回调函数中每次更新value仅累加至100时,即使循环执行完毕,进度条视觉上仅填充了50%的刻度范围。

1.4 mode

mode属性用于指定进度条的运行模式,可选值包括'determinate'和'indeterminate'两种: (1)determinate(确定模式) 在此模式下,进度条指示器从0开始,根据程序控制的数值逐步移动至最大刻度后停止。该模式适用于已知总任务量的场景,例如读取已知大小的文件,可通过计算当前读取量与总大小的比例来精确显示完成百分比。 (2)indeterminate(不确定模式) 在此模式下,进度条指示器会在固定范围内往复运动,用于表示某项处理正在进行中。该模式适用于任务耗时未知或无法预先确定进度的场景,例如查询数据库返回大量结果集,程序无法提前获知最终返回的数据量。


import tkinter as tk
from tkinter import ttk
import time 
def increment(*args):
    p1.start()
root = tk.Tk()
root.geometry('320x240')
p1 = ttk.Progressbar(root, length=200, mode="indeterminate",
                     maximum=200,orient=tk.HORIZONTAL)
p1.grid(row=1,column=1)
btn = ttk.Button(root,text="Start",command=increment)
btn.grid(row=1,column=0)
root.mainloop()	

补充说明:在indeterminate模式下,需调用进度条控件的start()方法来启动往复动画效果。

1.5 orient

用于设置进度条的几何方向,支持两种格式:水平(HORIZONTAL)和垂直(VERTICAL)。

1.6 style

用于自定义进度条的外观样式,具体配置方法请参阅文档23.2节。

1.7 takefocus

布尔属性,用于控制进度条是否可以通过Tab键获取输入焦点。

1.8 variable

关联一个IntVar()类型的变量,该变量可用于双向同步进度条的当前数值,既支持读取也支持设置。

1.9 value

直接读写进度条当前的数值状态。

2 函数

2.1 start(interval=None)

函数

描述

start(interval=None)

自动调整进度条的位置。通过启动一个循环定时事件,按照定义的步长调整进度条位置。定时器的间隔由interval参数来设定。间隔单位是毫秒.默认间隔是50毫秒。

step(amount=None)

每次调整进度条的步长,默认是1.0

stop()

停止定时器,停止进度条的自动调整

启动进度条的自动调整动画,默认时间间隔为50毫秒。该功能通过启动一个循环定时器实现,每次动画调整的步长由step()函数定义。

2.2 step(amount=None)

定义每次自动调整时进度条数值的增量。默认增量为1.0,可通过amount参数自定义其他数值。

2.3 stop

停止进度条的自动调整动画,终止定时器运行。


import tkinter as tk
from tkinter import ttk
import time
def start(*args):
    p1.start(30)
def stop(*args):
    value=p1['value']
    p1.stop()
    p1['value']=value    
root = tk.Tk()
root.geometry('320x240')
p1 = ttk.Progressbar(root, length=200,
                     mode="indeterminate",
                     orient=tk.HORIZONTAL)
p1.grid(row=1,column=0,columnspan=2)
btn_start = ttk.Button(root,text="开始",
                       command=start,width=10)
btn_start.grid(row=0,column=0)
btn_stop = ttk.Button(root,text="停止",
                      command=stop,width=10)
btn_stop.grid(row=0,column=1)
root.mainloop()

本文关于Python tkinter进度条控件(Progressbar)的详细介绍至此结束,更多相关Python tkinter进度条内容请搜索本站历史文章或继续浏览后续教程,感谢大家的支持!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表