byt*_*hon 5 python progress-bar rich
我正在开发一个使用 arich.Progress用于渲染进度条的应用程序。问题rich.prompt.Confirm只是闪烁,而不是在上下文中显示消息并要求确认Progress。
演示代码
from rich.progress import Progress
from rich.prompt import Confirm
from time import sleep
with Progress() as progress:
task = progress.add_task('Cooking')
while not progress.finished:
if Confirm.ask('Should I continue', default=False):
progress.update(task, advance=0.6)
sleep(0.4)
Run Code Online (Sandbox Code Playgroud)
编辑:我已经看到了 git 问题并进行了一些研究,似乎input(使用的rich.Prompt)不适用于任何使用rich.Live(使用的rich.Progress)的东西。所以现在我的问题是,如何构建代码以便不在rich.Progress上下文管理器中放置提示。或者这个问题的任何可能的解决方法。
因此,从Github 问题(这可能是您谈论的问题)开始,这现在是一种解决方法,感谢 Leonardo Cencetti。解决方案很简单。他暂停进度并清除进度线。当你完成后,他会再次开始进度。
对于未来的人来说,这是他的代码:
from rich.progress import Progress
class PauseProgress:
def __init__(self, progress: Progress) -> None:
self._progress = progress
def _clear_line(self) -> None:
UP = "\x1b[1A"
CLEAR = "\x1b[2K"
for _ in self._progress.tasks:
print(UP + CLEAR + UP)
def __enter__(self):
self._progress.stop()
self._clear_line()
return self._progress
def __exit__(self, exc_type, exc_value, exc_traceback):
self._progress.start()
Run Code Online (Sandbox Code Playgroud)
在 MWC 中,它的用法如下:
from rich.progress import Progress
from rich.prompt import Confirm
from time import sleep
with Progress() as progress:
task = progress.add_task('Cooking')
while not progress.finished:
with PauseProgress(progress):
ok_to_go = Confirm.ask('Should I continue', default=False)
if not ok_to_go:
break
progress.update(task, advance=0.6)
sleep(1)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
783 次 |
| 最近记录: |