本文主要介绍Python tkinter 进度条Progressbar应用及示例。
目录
系列文章
进度条Progressbar
基本概念
参数:
mode参数
基本应用
动画设计
引入time
具体实现
start/step/stop
step(amount):
start(interval):
stop():
indeterminate模式
总结
系列文章
python tkinter窗口简单实现
Python tkinter (1) —— Label标签
Python tkinter (2) —— Button标签
Python tkinter (3) —— Entry标签
Python tkinter (4) —— Text控件
Python tkinter (5) 选项按钮与复选框
Python tkinter (6) ——Listbox
Python tkinter (8) ——Spinbox控件
Python tkinter (9) ——Menu控件
Python tkinter (10) ——Combobox控件
Python tkinter (11) —— Frame控件
Python tkinter (12) —— Treeview控件
Python tkinter (13) —— 事件
Python tkinter (14) —— 按键事件
Python tkinter (15) —— PhotoImage
进度条Progressbar
基本概念
Progressbar 解释为进度条,主要当做一个工作进度的指针,在这个控件中会有一个指针,由此可以了解工作进度。
构造如下:
Progressbar(父对象, options, ...)
参数:
第一个参数:父对象,表示这个进度条将建立在哪一个窗口内
第二个参数:options,参数如下:
参数 | 含义 |
length | 进度条的长度,默认是100像素 |
mode | 可以有两种模式,下面作介绍 |
maximum | 进度条的最大值,默认是100像素 |
name | 进度条的名称,供程序参考引用 |
orient | 进度条的方向,可以是HORIZONTAL(默认) 或者是 VERTICAL |
value | 进度条的目前值 |
variable | 记录进度条目前的进度值 |
mode参数
determinate:一个指针会从起点移至终点,通常当我们知道所需工作时间时,可以使用此模式,这是默认模式
indeterminate:一个指针会在起点和终点间来回移动,通常当我们不知道工作所需时间时,可以使用此模式
基本应用
设置显示固定长度和固定进度的两个进度条,间隔高度20显示。
示例如下:
import tkinter
from tkinter import ttk
tk = tkinter.Tk()
tk.geometry('150x120')
one = ttk.Progressbar(tk)
one.pack(pady=20)
# 进度值最大值
one['maximum'] = 100
# 进度值初始值
one['value'] = 30
# 横排 长度100 起点填充至终点
two = ttk.Progressbar(tk, orient=tkinter.HORIZONTAL, length=100, mode='determinate')
two.pack()
two['maximum'] = 100
two['value'] = 80
tk.mainloop()
效果如下:
动画设计
如果想要设计含动画效果的Progressbar,可以在按钮上绑定事件,
更新Progressbar 对象的value值时调用update()方法,
这时窗口可以依据value值重绘,就达到了动画效果。
引入time
在原来基础上引入time库
示例如下:
import time
具体实现
示例如下:
def show():
for i in range(100):
# 每次更新加1
one['value'] = i + 1
# 更新画面
tk.update()
time.sleep(0.05)
one = ttk.Progressbar(tk)
one.pack(pady=20)
# 进度值最大值
one['maximum'] = 100
# 进度值初始值
one['value'] = 0
button = tkinter.Button(tk, text='开始', command=show)
button.pack(pady=5)
tk.mainloop()
执行结果:
start/step/stop
step(amount):
每次增加一次amount,默认值是1.0。
在determinate模式下,指针不会超过maximum参数。
在indeterminate模式下,当指针达到maximum参数值的前一格时,指针会回到起点。
示例如下:
import tkinter
from tkinter import ttk
tk = tkinter.Tk()
tk.geometry('250x250')
import time
def show():
while one.cget('value') <= one['maximum']:
one.step(2)
tk.update()
print(one.cget('value'))
time.sleep(0.05)
one = tkinter.ttk.Progressbar(tk, length=200, orient=tkinter.HORIZONTAL)
one.pack(pady=20)
one['maximum'] = 100
one['value'] = 0
button = tkinter.Button(tk, text='触发', command=show)
button.pack()
tk.mainloop()
效果如下:
start(interval):
每隔interval时间移动一次指针。
interval的默认值是50ms,每次移动指针调用一次step(amount)。
在step()方法内的amount参数意义就是增值量
stop():
停止start()运行
示例如下:
import tkinter
from tkinter import ttk
tk = tkinter.Tk()
tk.geometry('250x250')
import time
def start():
one.start()
def stop():
one.stop()
one = tkinter.ttk.Progressbar(tk, length=200, orient=tkinter.HORIZONTAL)
one.pack(pady=20)
one['maximum'] = 100
one['value'] = 0
button1 = tkinter.Button(tk, text='开始', command=start)
button1.pack()
button2 = tkinter.Button(tk, text='停止', command=stop)
button2.pack()
tk.mainloop()
效果如下:
indeterminate模式
在这个模式下指针将左右移动,主要目的是让用户知道程序仍然在继续工作。
示例如下:
import tkinter
from tkinter import ttk
tk = tkinter.Tk()
tk.geometry('250x250')
def start():
one.start()
one = ttk.Progressbar(tk, length=200, mode='indeterminate', orient=tkinter.HORIZONTAL)
one.pack(pady=20)
one['maximum'] = 100
one['value'] = 0
button1 = tkinter.Button(tk, text='开始', command=start)
button1.pack()
tk.mainloop()
效果如下:
总结
本文主要介绍Python tkinter 进度条Progressbar应用及示例。