ttk.Progressbar 进度条
Progressbar 进度条是 tkinter 的 ttk 加强模组里的元件,可以向用户提供程序执行的进度,这篇教学会介绍如何在 tkinter 中使用 Progressbar 进度条。
快速导览:
因为 Google Colab 不支援 tkinter,所以请使用本机环境 ( 参考:使用 Python 虚拟环境 ) 或使用 Anaconda Jupyter 进行实作 ( 参考:使用 Anaconda )。
加入 Progressbar
一开始先加载 tkinter 和 ttk 模组,建立 tkinter 视窗对象后,透过 Progressbar 方法,就能在视窗对象中建立 Progressbar 进度条,必要的参数有两个,第一个表示要加入的视窗对象,第二个是进度条的模式,下方的程序码执行后,会在视窗里加入一个模式为“加载中 indeterminate”的进度条 ( 位置、大小和颜色都使用默认值,根据操作系统的不同,进度条的样式也会有所不同 )。
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
root.title('oxxo.studio')
root.geometry('200x200')
bar = ttk.Progressbar(root)
bar.pack(pady=20)
bar.start(100)
root.mainloop()
Progressbar 参数设定
加入 Progressbar 之后,可以透过 Progressbar 的参数操作进度与显示模式,下方列出 Progressbar 的相关参数:
| 参数 | 说明 |
|---|---|
| orient | 进度条的方向,可设定 horizontal ( 水平,默认 ) 或 vertical ( 垂直 )。 |
| length | 进度条的长度,单位 px。 |
| mode | 进度条的模式,可设定 determinate ( 确定,默认 ) 或 indeterminant ( 不确定 )。 |
| maximum | 进度条最大值,默认 100。 |
| value | 进度条目前数值。 |
| variable | 进度条绑定的变数。 |
Progressbar 操作方法
透过下列方法,可以进行 Progressbar 进度条的相关操作:
| 方法 | 参数 | 说明 |
|---|---|---|
| start() | interval | 进度条开始运作,interval 为进度条动画间隔时间,默认 50 ( ms )。 |
| stop() | 停止进度条。 | |
| step() | delta | 每次进度条的增加值,默认 1。 |
点击按钮,增加进度
透过设定 Progressbar 的 value 属性,就透过进度条显示指定的进度,下方的程序码搭配 Button 按钮与 Label 标签,执行后只要点击按钮,就会不断以 10 的间距增加数值,直到 100 为止。
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
root.title('oxxo.studio')
root.geometry('200x200')
bar = ttk.Progressbar(root, mode='determinate')
bar.pack(pady=10)
a = 0 # 設定 a 從 0 開始
def show():
global a # 設定 a 是全域變數
if a< bar['maximum']:
a = a + 10 # 如果 a 小於進度條的最大值
bar['value'] = a # 設定進度條 value 為 a
val.set(f'{a}%') # Lable 變數設為 a
val = tk.StringVar()
val.set('0%')
label = tk.Label(root, textvariable=val)
label.pack()
button = tk.Button(root, text='增加進度', command=show)
button.pack()
root.mainloop()
透过循环改变进度条
下方的程序搭配了 for 循环以及 time 函数库,点击按钮时,就能让进度条自动增加 ( 注意!如果使用 for 循环,必须要使用 update() 方法才能更新视窗内容! )
import tkinter as tk
from tkinter import ttk
import time
root = tk.Tk()
root.title('oxxo.studio')
root.geometry('200x200')
bar = ttk.Progressbar(root, mode='determinate')
bar.pack(pady=10)
def show():
button['state'] = 'disabled' # 進度條開始時,不能點擊按鈕
button2['state'] = 'disabled' # 進度條開始時,不能點擊按鈕
for i in range(101):
bar['value'] = i # 每次迴圈執行時改變進度條進度
val.set(f'{i}%') # 每次迴圈執行時改變顯示文字
root.update() # 更新視窗內容 ( 很重要! )
time.sleep(0.01)
button2['state'] = 'normal' # 進度條結束始時,可以點擊「重來」按鈕
def clear():
button['state'] = 'normal' # 點擊重來按鈕時,「開始」按鈕可以點擊
button2['state'] = 'disabled' # 點擊重來按鈕時,不能點擊「重來」按鈕
bar['value'] = 0 # 進度條設為 0
val.set('0%') # 顯示文字為 0%
val = tk.StringVar()
val.set('0%')
label = tk.Label(root, textvariable=val)
label.pack()
button = tk.Button(root, text='開始', command=show)
button.pack()
button2 = tk.Button(root, text='重來', command=clear, state='disabled')
button2.pack()
root.mainloop()
微信扫码关注
抖音扫码关注