-
-
Notifications
You must be signed in to change notification settings - Fork 2.1k
Closed
Labels
Description
Describe the bug
In the code example below there are 100 major tasks that each contain 10 minor tasks. I've done this using a Live of a Table with two Progress bars. The minor tasks are added once at a time. After each major task, the minor tasks are removed.
This snippet leads to some artifacts being generated above the Live which is slowly sliding down at seemingly random times.
I've added a screenshot below to illustrate.
To Reproduce
Please note: The bug occurs often but at seemingly random times. Give it a few major tasks and it should show up.
import time
from rich.live import Live
from rich.progress import Progress, BarColumn, TimeRemainingColumn, TextColumn, SpinnerColumn, TransferSpeedColumn, FileSizeColumn, TotalFileSizeColumn
from rich.table import Table
progressOverall = Progress(
"{task.completed} of {task.total}",
BarColumn(),
"[progress.percentage]{task.percentage:>3.2f}%",
TimeRemainingColumn(),
"[progress.description]{task.description}",
)
taskOverall = progressOverall.add_task("[red]Downloading piece...", total=100)
progressFile = Progress(
"├─",
SpinnerColumn(),
BarColumn(),
"[progress.percentage]{task.percentage:>3.0f}%",
TransferSpeedColumn(),
TotalFileSizeColumn(),
TimeRemainingColumn(),
"[progress.description]{task.description}",
)
progress_table = Table(show_header=False, show_edge=False)
progress_table.add_row(progressOverall)
progress_table.add_row(progressFile)
with Live(progress_table, refresh_per_second=30, vertical_overflow="visible") as live:
print = live.console.print
for i in range(100):
progressOverall.update(taskOverall, completed=i, description="Major Task # %s" % (i)) # Update major task with progress
for minorTaskID in range(10):
taskFile = progressFile.add_task("[red]Downloading: %d" % (minorTaskID), total=100) # Create minor task
time.sleep(0.4)
progressFile.update(taskFile, description="[green]Done", completed=100) # Simulate it being done after a couple of 0.4s
time.sleep(0.4)
# Clear the minor tasks for the next major task
for task in progressFile.task_ids:
progressFile.remove_task(task)
time.sleep(0.5)Platform
Microsoft Windows 10 Pro Version 10.0.19041 Build 19041
Diagnose
PS C:\Users\Stone> python -m rich.diagnose
╭───────────────────────── <class 'rich.console.Console'> ─────────────────────────╮
│ A high level console interface. │
│ │
│ ╭──────────────────────────────────────────────────────────────────────────────╮ │
│ │ <console width=120 ColorSystem.TRUECOLOR> │ │
│ ╰──────────────────────────────────────────────────────────────────────────────╯ │
│ │
│ color_system = 'truecolor' │
│ encoding = 'utf-8' │
│ file = <_io.TextIOWrapper name='<stdout>' mode='w' encoding='utf-8'> │
│ height = 45 │
│ is_alt_screen = False │
│ is_dumb_terminal = False │
│ is_interactive = True │
│ is_jupyter = False │
│ is_terminal = True │
│ legacy_windows = False │
│ no_color = False │
│ options = ConsoleOptions( │
│ size=ConsoleDimensions(width=120, height=45), │
│ legacy_windows=False, │
│ min_width=1, │
│ max_width=120, │
│ is_terminal=True, │
│ encoding='utf-8', │
│ justify=None, │
│ overflow=None, │
│ no_wrap=False, │
│ highlight=None, │
│ markup=None, │
│ height=None │
│ ) │
│ quiet = False │
│ record = False │
│ safe_box = True │
│ size = ConsoleDimensions(width=120, height=45) │
│ soft_wrap = False │
│ stderr = False │
│ style = None │
│ tab_size = 8 │
│ width = 120 │
╰──────────────────────────────────────────────────────────────────────────────────╯
PS C:\Users\Stone> python -m rich._windows
platform="Windows"
WindowsConsoleFeatures(vt=True, truecolor=True)
PS C:\Users\Stone> pip freeze
...
rich==10.0.0
...
Reactions are currently unavailable

