日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python写界面进度条程序_Python中如何写控制台进度条的整理

發布時間:2025/3/20 python 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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

)

print

第二種思路是用轉義符\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

)

print

光標回退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中如何写控制台进度条的整理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。