【发布时间】:2020-02-20 20:53:16
【问题描述】:
我知道这个主题听起来很模糊,我会尽力解释。
我是新手,我正在尝试在 progressbar2 库的帮助下制作自定义进度条。我的操作系统是 Windows 10,我的终端是标准命令行,我使用的是 Python 3.8.1。
我从官方文档中拿了一个填充动画进度条的例子,并尝试对其进行一些修改,以使用 ANSI 转义字符使其变得丰富多彩。这是我的代码:
"""
Displays a fancy progress bar.
:param text: Progress bar text
:return: Progress bar object
"""
V = '\033[38;5;31m'
END = '\033[0m'
bar = \
progressbar.ProgressBar(widgets=[f'{V}{text}{END}', progressbar.Percentage(),
progressbar.Bar(marker=progressbar.AnimatedMarker(fill=f'{V}#{END}'))])
return bar
但是当我这样做时,我观察到一个奇怪的副作用。为了便于理解,我截取了一个简短的截屏视频:https://youtu.be/p_YpkbJrTa8
在0:05,您可以看到更新栏时光标在控制台中留下了几个蓝色的| 字符以及井号被窃听后的动画。但是,如果我保持井号无色,一切看起来都很好(参见 0:35)。
您还可以看到,在第一种情况下,光标每次更新时都会跳转到 hast 符号,而在第二种情况下,它会停留在最右边的位置。
那么,有没有办法解决这个问题,让井号保持丰富多彩和动画,但控制台中没有不需要的 | 字符?
我将不胜感激。
更新:
我能够解决这个问题,用相同的 ANSI 颜色代码包装构成动画的标记。
V = '\033[38;5;31m'
END = '\033[0m'
bar = \
progressbar.ProgressBar(widgets=[f'{V}{text}{END}', progressbar.Percentage(),
progressbar.Bar(marker=progressbar.AnimatedMarker(markers=f'{V}|/-\\{END}',
fill=f'{V}#{END}'))])
return bar
现在| 字符停留在它所属的最右侧位置,但动画仍然有点损坏。我制作了另一个截屏视频来证明:https://youtu.be/t2YwlBQxcN0
似乎缺少连字符,有时动画标记变为无色(请参阅0:09,尤其是0:21)。我会尝试在 GitHub 上提交问题。
【问题讨论】:
标签: python terminal progress-bar stdout ansi-escape