@@ -72,11 +72,13 @@ def __init__(
72
72
disabled : bool = False ,
73
73
clock : Clock | None = None ,
74
74
gradient : Gradient | None = None ,
75
+ bar_renderable : BarRenderable = BarRenderable ,
75
76
):
76
77
"""Create a bar for a [`ProgressBar`][textual.widgets.ProgressBar]."""
77
78
self ._clock = (clock or Clock ()).clone ()
78
79
super ().__init__ (name = name , id = id , classes = classes , disabled = disabled )
79
80
self .set_reactive (Bar .gradient , gradient )
81
+ self .bar_renderable = bar_renderable
80
82
81
83
def _validate_percentage (self , percentage : float | None ) -> float | None :
82
84
"""Avoid updating the bar, if the percentage increase is too small to render."""
@@ -104,7 +106,7 @@ def render(self) -> RenderResult:
104
106
if self .percentage < 1
105
107
else self .get_component_rich_style ("bar--complete" )
106
108
)
107
- return BarRenderable (
109
+ return self . bar_renderable (
108
110
highlight_range = (0 , self .size .width * self .percentage ),
109
111
highlight_style = Style .from_color (bar_style .color ),
110
112
background_style = Style .from_color (bar_style .bgcolor ),
@@ -133,7 +135,7 @@ def render_indeterminate(self) -> RenderResult:
133
135
end = start + highlighted_bar_width
134
136
135
137
bar_style = self .get_component_rich_style ("bar--indeterminate" )
136
- return BarRenderable (
138
+ return self . bar_renderable (
137
139
highlight_range = (max (0 , start ), min (end , width )),
138
140
highlight_style = Style .from_color (bar_style .color ),
139
141
background_style = Style .from_color (bar_style .bgcolor ),
@@ -239,6 +241,7 @@ def __init__(
239
241
disabled : bool = False ,
240
242
clock : Clock | None = None ,
241
243
gradient : Gradient | None = None ,
244
+ bar_renderable : BarRenderable = BarRenderable ,
242
245
):
243
246
"""Create a Progress Bar widget.
244
247
@@ -265,6 +268,7 @@ def key_space(self):
265
268
disabled: Whether the widget is disabled or not.
266
269
clock: An optional clock object (leave as default unless testing).
267
270
gradient: An optional Gradient object (will replace CSS styles in the bar).
271
+ bar_renderable: A custom Bar object that is rendered as the bar.
268
272
"""
269
273
self ._clock = clock or Clock ()
270
274
self ._eta = ETA ()
@@ -274,6 +278,7 @@ def key_space(self):
274
278
self .show_percentage = show_percentage
275
279
self .show_eta = show_eta
276
280
self .set_reactive (ProgressBar .gradient , gradient )
281
+ self .bar_renderable = bar_renderable
277
282
278
283
def on_mount (self ) -> None :
279
284
self .update ()
@@ -283,7 +288,7 @@ def on_mount(self) -> None:
283
288
def compose (self ) -> ComposeResult :
284
289
if self .show_bar :
285
290
yield (
286
- Bar (id = "bar" , clock = self ._clock )
291
+ Bar (id = "bar" , clock = self ._clock , bar_renderable = self . bar_renderable )
287
292
.data_bind (ProgressBar .percentage )
288
293
.data_bind (ProgressBar .gradient )
289
294
)
0 commit comments