* First prototype of PB. * Repurpose UnderlineBar. * Factor out 'Bar' widget. * Revert "Factor out 'Bar' widget." This reverts commit 0bb4871adf566416cfe590ac4396e0b79f84165c. * Add Bar widget. * Cap progress at 100%. * Add skeleton for the ETA label. [skip ci] * Add ETA display. * Improve docstrings. * Directly compute percentage. * Watch percentage changes directly. [skip ci] * Documentation. * Make reactive percentage private. Instead, we create a public read-only percentage property. * Update griffe to fix documentation issue. Related issues: #1572, https://github.com/mkdocstrings/griffe/issues/128. Related PRs: https://github.com/mkdocstrings/griffe/pull/135. * Add example and docs. * Address review feedback. [skip ci] * More documentation. * Add tests. * Changelog. * More tests. * Fix/fake tests. * Final tweaks.
34 lines
1 KiB
Python
34 lines
1 KiB
Python
from textual.app import App, ComposeResult
|
|
from textual.containers import Center, Middle
|
|
from textual.timer import Timer
|
|
from textual.widgets import Footer, ProgressBar
|
|
|
|
|
|
class IndeterminateProgressBar(App[None]):
|
|
BINDINGS = [("s", "start", "Start")]
|
|
|
|
progress_timer: Timer
|
|
"""Timer to simulate progress happening."""
|
|
|
|
def compose(self) -> ComposeResult:
|
|
with Center():
|
|
with Middle():
|
|
yield ProgressBar()
|
|
yield Footer()
|
|
|
|
def on_mount(self) -> None:
|
|
"""Set up a timer to simulate progess happening."""
|
|
self.progress_timer = self.set_interval(1 / 10, self.make_progress, pause=True)
|
|
|
|
def make_progress(self) -> None:
|
|
"""Called automatically to advance the progress bar."""
|
|
self.query_one(ProgressBar).advance(1)
|
|
|
|
def action_start(self) -> None:
|
|
"""Start the progress tracking."""
|
|
self.query_one(ProgressBar).update(total=100)
|
|
self.progress_timer.resume()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
IndeterminateProgressBar().run()
|