python写界面进度条程序_Python中如何写控制台进度条的整理
進度條和一般的print區別在哪里呢?
答案就是print會輸出一個\n,也就是換行符,這樣光標移動到了下一行行首,接著輸出,之前已經通過stdout輸出的東西依舊保留,而且保證我們在下面看到最新的輸出結果。
進度條不然,我們必須再原地輸出才能保證他是一個進度條,否則換行了怎么還叫進度條?
最簡單的辦法就是,再輸出完畢后,把光標移動到行首,繼續在那里輸出更長的進度條即可實現,新的更長的進度條把舊的短覆蓋,就形成了動畫效果。
可以想到那個轉義符了吧,那就是 \r。
轉義符\r就可以把光標移動到行首而不換行,轉義符\n就把光標移動到行首并且換行。
在python中,輸出stdout(標準輸出)可以使用sys.stdout.write
例如:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/usr/bin/env python
# -*- coding=utf-8 -*-
#Using GPL v2
#Author: ihipop@gmail.com
##2010-10-27 22:07
"""
Usage:
Just A Template
"""
from
__future__
import
division
import
sys
,
time
j
=
'#'
if
__name__
==
'__main__'
:
for
i
in
range
(
1
,
61
)
:
j
+
=
'#'
sys
.
stdout
.
write
(
str
(
int
(
(
i
/
60
)
*
100
)
)
+
'%??||'
+
j
+
'->'
+
"\r"
)
sys
.
stdout
.
flush
(
)
time
.
sleep
(
0.5
)
第二種思路是用轉義符\b
轉義符\b是退格鍵,也就是說把輸出的光標往回退格子,這樣就可以不用+=了,例如:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/usr/bin/env python
# -*- coding=utf-8 -*-
#Using GPL v2
#Author: ihipop@gmail.com
#2010-10-27 22:07
"""
Usage:
Just A Template
"""
from
__future__
import
division
import
sys
,
time
if
__name__
==
'__main__'
:
for
i
in
range
(
1
,
61
)
:
sys
.
stdout
.
write
(
'#'
+
'->'
+
"\b\b"
)
sys
.
stdout
.
flush
(
)
time
.
sleep
(
0.5
)
光標回退2格,寫個#再回退,再寫,達到增長的目的了
不過寫這么多似乎是廢話,在耳邊常常聽到一句話:那就是不要重復造輪子。實際上python有豐富發lib幫你實現這個東西,你完全可以把心思放在邏輯開發上而不用注意這些小細節
下面就是基本使用舉例:
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
29
30
31
32
33
34
35
#!/usr/bin/env python
# -*- coding=utf-8 -*-
#Using GPL v2
#Author: ihipop@gmail.com
#2010-10-27 22:53
"""
Usage:
Just A Template
"""
from
__future__
import
division
import
sys
,
time
from
progressbar
import
*
total
=
1000
#基本用法
progress
=
ProgressBar
(
)
for
i
in
progress
(
range
(
total
)
)
:
time
.
sleep
(
0.01
)
pbar
=
ProgressBar
(
)
.
start
(
)
for
i
in
range
(
1
,
1000
)
:
pbar
.
update
(
int
(
(
i
/
(
total
-
1
)
)
*
100
)
)
time
.
sleep
(
0.01
)
pbar
.
finish
(
)
#高級用法
widgets
=
[
'Progress: '
,
Percentage
(
)
,
' '
,
Bar
(
marker
=
RotatingMarker
(
'>-='
)
)
,
' '
,
ETA
(
)
,
' '
,
FileTransferSpeed
(
)
]
pbar
=
ProgressBar
(
widgets
=
widgets
,
maxval
=
10000000
)
.
start
(
)
for
i
in
range
(
1000000
)
:
# do something
pbar
.
update
(
10
*
i
+
1
)
time
.
sleep
(
0.0001
)
pbar
.
finish
(
)
官方示例下載,移步這里:
http://code.google.com/p/python-progressbar/source/browse/progressbar/examples.py
再發一個類:
Python
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#!/usr/bin/env python
# -*- coding=utf-8 -*-
#Using GPL v2
#Author: ihipop@gmail.com
#2010-10-30 13:59
"""
Usage:
Just A Template
"""
class
progressbarClass
:
def
__init__
(
self
,
finalcount
,
progresschar
=
None
)
:
import
sys
self
.
finalcount
=
finalcount
self
.
blockcount
=
0
#
# See if caller passed me a character to use on the
# progress bar (like "*").??If not use the block
# character that makes it look like a real progress
# bar.
#
if
not
progresschar
:
self
.
block
=
chr
(
178
)
else
:
self
.
block
=
progresschar
#
# Get pointer to sys.stdout so I can use the write/flush
# methods to display the progress bar.
#
self
.
f
=
sys
.
stdout
#
# If the final count is zero, don't start the progress gauge
#
if
not
self
.
finalcount
:
return
self
.
f
.
write
(
'\n------------------- % Progress -------------------\n'
)
return
def
progress
(
self
,
count
)
:
#
# Make sure I don't try to go off the end (e.g. >100%)
#
count
=
min
(
count
,
self
.
finalcount
)
#
# If finalcount is zero, I'm done
#
if
self
.
finalcount
:
percentcomplete
=
int
(
round
(
100
*
count
/
self
.
finalcount
)
)
if
percentcomplete
<
1
:
percentcomplete
=
1
else
:
percentcomplete
=
100
#print "percentcomplete=",percentcomplete
blockcount
=
int
(
percentcomplete
/
2
)
#print "blockcount=",blockcount
if
blockcount
>
self
.
blockcount
:
for
i
in
range
(
self
.
blockcount
,
blockcount
)
:
self
.
f
.
write
(
self
.
block
)
self
.
f
.
flush
(
)
if
percentcomplete
==
100
:
self
.
f
.
write
(
"\n"
)
self
.
blockcount
=
blockcount
return
if
__name__
==
"__main__"
:
from
time
import
sleep
pb
=
progressbarClass
(
8
,
"*"
)
count
=
0
while
count
<
9
:
count
+
=
1
pb
.
progress
(
count
)
sleep
(
0.2
)
Author Info :
Please Reserve This Link,Thanks!
總結
以上是生活随笔為你收集整理的python写界面进度条程序_Python中如何写控制台进度条的整理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: extjs4 java_extjs4
- 下一篇: python遗传算法最短路径问题有几种类