Progressbar 基本概念
Progressbar 可以解释为进度条,主要是当做一个工作进度的指针,在这个控件中会有一个指针,由此指针可以了解工作进度
构造方法如下:
1
|
Progressbar(父对象, options, ...) |
参数:
- 第一个参数:父对象,表示这个进度条将建立在哪一个窗口内
-
第二个参数:
options
,参数如下
参数 | 含义 |
---|---|
length | 进度条的长度默认是100像素 |
mode | 可以有两种模式,下面作介绍 |
maximum | 进度条的最大值默认是100像素 |
name | 进度条的名称,供程序参考引用 |
orient | 进度条的方向,可以是HORIZONTAL(默认) 或者是 VERTICAL |
value | 进度条的目前值 |
variable | 记录进度条目前的进度值 |
mode参数
-
determinate
:一个指针会从起点移至终点,通常当我们知道所需工作时间时,可以使用此模式,这是默认模式 -
indeterminate
:一个指针会在起点和终点间来回移动,通常当我们不知道工作所需时间时,可以使用此模式 Progressbar
基本应用
例子:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
import tkinter import tkinter.ttk root = tkinter.Tk() root.geometry( '150x120' ) progressbarOne = tkinter.ttk.Progressbar(root) progressbarOne.pack(pady = 20 ) # 进度值最大值 progressbarOne[ 'maximum' ] = 100 # 进度值初始值 progressbarOne[ 'value' ] = 20 # 横排 长度200 起点移至终点 progressbarTwo = tkinter.ttk.Progressbar(root, orient = tkinter.HORIZONTAL, length = 200 , mode = 'determinate' ) progressbarTwo.pack(pady = 20 ) # 进度值最大值 progressbarTwo[ 'maximum' ] = 100 # 进度值初始值 progressbarTwo[ 'value' ] = 80 root.mainloop() |
运行结果:
注意:现在进度条还不能动!
Progressbar 动画设计
如果想要设计含动画效果的Progressbar,可以在每次更新Progressbar 对象的value值时调用update()
方法,这时窗口可以依据value值重绘,这样就可以达到动画效果
例子:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
import time import tkinter import tkinter.ttk def show(): for i in range ( 100 ): # 每次更新加1 progressbarOne[ 'value' ] = i + 1 # 更新画面 root.update() time.sleep( 0.05 ) root = tkinter.Tk() root.geometry( '150x120' ) progressbarOne = tkinter.ttk.Progressbar(root) progressbarOne.pack(pady = 20 ) # 进度值最大值 progressbarOne[ 'maximum' ] = 100 # 进度值初始值 progressbarOne[ 'value' ] = 0 button = tkinter.Button(root, text = 'Running' , command = show) button.pack(pady = 5 ) root.mainloop() |
运行结果:
例子:
模拟真实下载,下载总量是10000B, 每次下载500B
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
def show(): # 设置进度条的目前值 progressbarOne[ 'value' ] = 0 # 设置进度条的最大值 progressbarOne[ 'maximum' ] = maxbyte # 调用loading方法 loading() def loading(): # 改变变量属性 global byte # 每次运行500B byte + = 500 # 设置指针 progressbarOne[ 'value' ] = byte if byte < maxbyte: # 经过100ms后再次调用loading方法 progressbarOne.after( 100 , loading) root = tkinter.Tk() root.geometry( '150x120' ) # 设置下载初值 byte = 0 # 设置下载最大值 maxbyte = 10000 progressbarOne = tkinter.ttk.Progressbar(root) progressbarOne.pack(pady = 20 ) button = tkinter.Button(root, text = 'Running' , command = show) button.pack(pady = 5 ) root.mainloop() |
运行结果:
Progressbar 的方法 start()/step()/stop()
含义如下:
-
start(interval)
:每隔interval时间移动一次指针。interval的默认值是50ms,每次移动指针调用一次step(amount)。在step()方法内的amount参数意义就是增值量 -
step(amount)
:每次增加一次amount,默认值是1.0,在determinate模式下,指针不会超过maximum参数。在indeterminate模式下,当指针达到maximum参数值的前一格时,指针会回到起点 -
stop()
:停止start()运行
例子:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
import time import tkinter import tkinter.ttk def show(): while progressbarOne.cget( 'value' ) < = progressbarOne[ 'maximum' ]: progressbarOne.step( 2 ) root.update() print (progressbarOne.cget( 'value' )) time.sleep( 0.05 ) root = tkinter.Tk() root.geometry( '150x120' ) progressbarOne = tkinter.ttk.Progressbar(root, length = 200 , mode = 'determinate' , orient = tkinter.HORIZONTAL) progressbarOne.pack(pady = 20 ) progressbarOne[ 'maximum' ] = 100 progressbarOne[ 'value' ] = 0 button = tkinter.Button(root, text = 'Running' , command = show) button.pack(pady = 5 ) root.mainloop() |
运行结果:
使用start()方法启动动画,单击stop按钮停止
例子:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
import tkinter import tkinter.ttk def run(): progressbarOne.start() def stop(): progressbarOne.stop() root = tkinter.Tk() root.geometry( '150x120' ) progressbarOne = tkinter.ttk.Progressbar(root, length = 200 , mode = 'determinate' , orient = tkinter.HORIZONTAL) progressbarOne.pack(padx = 5 , pady = 10 ) progressbarOne[ 'maximum' ] = 100 progressbarOne[ 'value' ] = 0 buttonRun = tkinter.Button(root, text = 'Run' , width = 6 , command = run) buttonRun.pack(padx = 10 , pady = 5 , side = tkinter.LEFT) buttonStop = tkinter.Button(root, text = 'Stop' , width = 6 , command = stop) buttonStop.pack(padx = 10 , pady = 5 , side = tkinter.RIGHT) root.mainloop() |
运行结果:
indeterminate 模式
在这个模式下指针将左右移动,主要目的是让用户知道程序仍然在继续工作
例子:
1
|
progressbarOne = tkinter.ttk.Progressbar(root, length = 200 , mode = 'indeterminate' , orient = tkinter.HORIZONTAL) |
运行结果:
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/qq_44168690/article/details/105092516