为什么 tqdm 打印到换行而不是更新同一行?

新手上路,请多包涵

我正在用 python 开发一个小型命令行游戏,我在其中使用 tqdm 模块显示进度条。我使用 msvcrt 模块监听用户输入以中断进程。一旦中断,用户可以通过在命令行提示符中输入“重新启动”来重新启动。第二次显示进度条时,它不会根据进度更新同一行,而是每次都创建一个新行。

我怎样才能让它在同一条线上显示进度?

进度条问题

此代码片段说明了我对进度条的使用。

 def transfer():
    for i in tqdm.tqdm(range(1000), desc="Transfer progress", ncols=100, bar_format='{l_bar}{bar}|'):
        sleep(.1)
        if msvcrt.kbhit():
            if msvcrt.getwche() == ' ':
                interrupt()
                break

def interrupt():
    type("File transfer interrupted, to restart the transfer, type 'restart'")

原文由 Pieter Helsen 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 3.5k
2 个回答

试试 position=0leave=True

(解决方案在 Google Colab 中运行以避免打印到换行符)

 from tqdm import tqdm
import time

def foo_():
    time.sleep(0.3)
range_ = range(0, 10)
total = len(range_)

with tqdm(total=total, position=0, leave=True) as pbar:
   for i in tqdm((foo_, range_ ), position=0, leave=True):
    pbar.update()

原文由 SciPy 发布,翻译遵循 CC BY-SA 4.0 许可协议

tqdm_notebook 已弃用。您必须改用 tq.notebook.tqdm

 import tqdm.notebook as tq
for i in tq.tqdm(...):

此外,tqdm_notebook 在性能方面确实很惨。新库完全纠正了这一点。

原文由 Laurent GRENIER 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏