You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python progressbar模块进度条无法单行显示如何解决

问题原因

进度条没法在同一行刷新、每次更新都跳新行,主要是两个问题:

  • 你写的更新逻辑有问题:pbar.start() 启动后进度默认是0,但你的循环从100才开始更新,直接跳过了0-99的进度段,最后还多写了一个没用的空print,逻辑本身就不对
  • 运行环境不兼容:progressbar库实现单行刷新的原理是输出\r回车符,把光标拉回当前行开头再覆盖写新内容。要是你在IDLE、老版本PyCharm控制台、不支持ANSI转义的老终端里跑脚本,\r会被识别成换行符,自然每更一次就多一行。
解决方案

方案1:改原有代码,在兼容终端运行

先把代码逻辑改对,换到支持回车刷新的终端(比如VSCode内置终端、Windows Terminal、Win10以上版本系统自带的CMD/PowerShell、Linux/macOS的bash/zsh)运行,就能正常单行显示:

import time
from progressbar import *

widgets = ['Test: ', Percentage(), ' ', Bar(marker='0',left='[',right=']'),
           ' ', ETA(), ' ', FileTransferSpeed()]

pbar = ProgressBar(widgets=widgets, maxval=500)
pbar.start()

# 从0开始遍历,数值范围和maxval对应
for i in range(500 + 1):
    # 这里替换成你自己的耗时任务逻辑
    time.sleep(0.01)
    pbar.update(i)
pbar.finish()

注意:进度条跑的过程中别直接用print()打其他内容,不然会把当前行的进度条挤到新行去。

方案2:换用适配性更好的tqdm库

要是你需要在IDE自带控制台这类特殊环境跑脚本,更推荐用tqdm做进度条,它对各种环境的适配比老的progressbar库好很多,写法也更简单。
先装库:
pip install tqdm
对应效果和你原来一致的代码:

import time
from tqdm import tqdm

for i in tqdm(range(501), 
              desc='Test',
              bar_format='{desc}: {percentage:3.0f}% |{bar}| {remaining} {rate_fmt}'):
    # 替换成你自己的任务逻辑
    time.sleep(0.01)

内容的提问来源于stack exchange,提问作者martinmistere

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 10:51:21