我想要一个应用程序的加载栏,但是该应用程序有很大的暂停时间,所以我也希望表明即使加载栏暂时没有填充,该进程也没有终止。
使用python progressbar库,我想到了这一点。
import progressbar
import time
loopval=20
bar = progressbar.ProgressBar(maxval=loopval,widgets[progressbar.Bar(marker='#',fill='.',\
left='[',right=']'),progressbar.AnimatedMarker(), progressbar.Percentage()])
bar.start()
for i in range(loopval):
bar.update(i+1)
time.sleep(0.1)
这会打印出一个美观的'.s横条,它慢慢地用'#'填充,并在行尾具有准确的百分比以及旋转的动画标记。
例如: [############################################### ###########################] / 100% (最后的斜杠在|,/,-和\之间)
我希望能够独立于条形更新来更新动画标记。这样,即使该栏暂时没有更新,动画标记也会显示该过程仍然存在。
我已经浏览了进度栏文档,但找不到解决方法。如果有更好的图书馆可以使我更轻松地切换图书馆,我就不会嫁给这个图书馆。
答案 0 :(得分:1)
不确定这是否正是您要寻找的东西,但是我设法通过用asyncio包装代码来做到这一点。我将两次更新之间的睡眠时间增加到1秒,以使异步更新更加明显。希望这会有所帮助。
# Python 3.6+
import asyncio
import progressbar
async def update_bar(bar):
while not bar.end_time:
bar.update()
await asyncio.sleep(0.1)
async def iterate_bar(bar, loopval):
bar.start()
for i in range(loopval):
bar.update(i+1)
await asyncio.sleep(1)
bar.finish()
async def main(bar, loopval):
await asyncio.gather(update_bar(bar), iterate_bar(bar, loopval))
if __name__ == '__main__':
loopval = 20
bar = progressbar.ProgressBar(
maxval=loopval,
widgets=[
progressbar.Bar(
marker='#',
fill='.',
left='[',
right=']',
),
progressbar.AnimatedMarker(),
progressbar.Percentage(),
],
)
asyncio.run(main(bar, loopval))