第七章 文本進度條的實現
阿新 • • 發佈:2018-08-10
spa cmd命令行 自帶 位置 屏蔽 perf 實現 常見 bubuko
文本進度條
大家都見過程加載的時候的文本進度條
進度條的原理是什麽呢?
1、采用字符串方式打印可以動態變化的文本進度條
2、進度條需要能在一行中逐漸變化
問題分析:
如何獲取一個文本進度條的變化時間呢?
1、采用sleep()模擬一個持續的進度
2、似乎不那麽難
簡單的開始:
1 #TextProBarV1.py 2 import time 3 scale = 10 4 print("------執行開始------") 5 for i in range(scale+1): 6 a = ‘*‘ * i 7 b = ‘.‘ * (scale - i) 8 c = (i/scale)*100 9print("{:^3.0f}%[{}->{}]".format(c,a,b)) 10 time.sleep(0.1) 11 print("------執行結束------")
執行結果如下圖所示:
單行動態刷新:
刷新的關鍵是\r
1、刷新的本質是:用後打印的字符覆蓋之前打印的字符
2、不能換行:print()需要被控制
3、需要回退:打印後光標退回到之前的位置\r
1 #TextProBarV2.py 2 import time 3 for i in range(101): 4 print("\r{:3}%".format(i), end="") 5time.sleep(0.1)
如果我們在python自帶的idle裏面運行將會有如下效果
原因是IDLE屏蔽了\r功能
在cmd命令行中運行即可
可以看到如上代碼只有百分比數字顯示,並不是我們常見的完整的進度條,我們繼續完善代碼:
1 #TextProBarV3.py 2 import time 3 scale = 50 4 print("執行開始".center(scale//2, "-")) 5 start = time.perf_counter() 6 for i in range(scale+1): 7 a = ‘*‘ * i 8 b = ‘.‘ * (scale - i) 9 c = (i/scale)*100 10 dur = time.perf_counter() - start 11 print("\r{:^3.0f}%[{}->{}]{:.2f}s".format(c,a,b,dur),end=‘‘) 12 time.sleep(0.1) 13 print("\n"+"執行結束".center(scale//2,‘-‘))
執行後的運行結果如下圖所示:
第七章 文本進度條的實現