ttk.Progressbar是Tkinter主题化组件库(ttk)中的进度条组件,用于直观展示任务的完成进度(如文件下载、数据处理、批量操作等),支持确定模式(已知总进度)和不确定模式(未知总进度),界面比原生Tkinter 进度条更美观。
import tkinter as tkfrom tkinter import ttk #从tkinter模块导入子模块ttk
import tkinter as tkfrom tkinter import ttk #从tkinter模块导入子模块ttkroot=tk.Tk()root.title("Progressbar组件")root.geometry("300x300+600+200")tk.mainloop()
| |
| 父窗口,指定进度条属于哪个窗口。 |
orient | 进度条方向, 可选 tk.HORIZONTAL (水平) 或 tk.VERTICAL (垂直)。 |
mode | 模式,可选 'determinate' (确定模式) 或 'indeterminate' (不确定模式)。 |
length | 进度条长度 (水平模式为宽度,垂直模式为高度),单位:像素。 |
maximum | 最大值,默认 100。 |
value | 当前值,value/maximum 即为进度百分比。 |
variable | 关联的变量,通常设为 tk.IntVar(),改变该变量时进度条会自动同步更新 |
style | 使用的自定义样式名,用于外观定制。 |
text | 在进度条内部显示的文字,仅水平模式下有效。 |
phase | 只读属性,配合动画效果使用。 |
anchor, font, foreground, justify, wraplength | 配合 text 选项控制文字的显示位置、字体、颜色、对齐方式等 |
| |
start(interval=None) | 启动进度条动画。interval 为步进间隔 (毫秒),默认 50 ms |
step(amount=None) | 将 value 增加指定步长。amount 为正整数,默认 1.0 |
stop() | 停止进度条动画。 |
configure(**kw) | 动态修改参数 (如value、mode) |
import tkinter as tkfrom tkinter import ttk #从tkinter模块导入子模块ttkroot=tk.Tk()root.title("Progressbar组件")root.geometry("300x300+600+200")#创建一个水平、确定模式的进度条progress=ttk.Progressbar(root,orient="horizontal",length=300,mode="determinate",maximum=101)progress.pack(pady=20)def update_progress(): progress.step(10) # 设定每次点击增加10% # 获取当前值,判断是否已到达最大值 current_value=progress['value'] print(current_value) print(progress['maximum']) if current_value>=100: # 进度条已满,停止按钮的点击效果或做其他处理 progress_btn.config(state=tk.DISABLED) print("任务完成!")progress_btn=ttk.Button(root,text="增加进度",command=update_progress)progress_btn.pack(pady=10)tk.mainloop()
import tkinter as tkfrom tkinter import ttk #从tkinter模块导入子模块ttkroot=tk.Tk()root.title("Progressbar组件")root.geometry("300x300+600+200")def start_long_task(): progress.start() # 模拟一个耗时5.5秒的“长任务” # 使用 after 方法模拟,避免界面卡死 root.after(5500, stop_progress)def stop_progress(): progress.stop() status_label.config(text="任务已完成!") print("长任务结束,进度条已停止。")#创建一个水平、确定模式的进度条progress=ttk.Progressbar(root,orient="horizontal",length=300,mode="indeterminate")progress.pack(pady=20)progress_btn=ttk.Button(root,text="开始耗时任务",command=start_long_task)progress_btn.pack(pady=10)# 状态提示标签status_label=ttk.Label(root,text="点击按钮开始任务")status_label.pack(pady=10)tk.mainloop()