Rich has a
Text class you can use to mark up strings with color and style attributes. You can use a Text instance anywhere a string is accepted, which gives you a lot of control over presentation.
You can consider this class to be like a string with marked up regions of text. Unlike a built-in
str, a Text instance is mutable, and most methods operate in-place rather than returning a new instance.
One way to add a style to Text is the
stylize() method which applies a style to a start and end offset. Here is an example:
from rich.console import Console from rich.text import Text console = Console() text = Text("Hello, World!") text.stylize("bold magenta", 0, 6) console.print(text)
This will print “Hello, World!” to the terminal, with the first word in bold magenta.
Alternatively, you can construct styled text by calling
append() to add a string and style to the end of the Text. Here’s an example:
text = Text() text.append("Hello", style="bold magenta") text.append(" World!") console.print(text)
If you would like to use text that is already formatted with ANSI codes, call
from_ansi() to convert it to a
text = Text.from_ansi("\033[1mHello, World!\033[0m") console.print(text.spans)
Since building Text instances from parts is a common requirement, Rich offers
assemble() which will combine strings or pairs of string and Style, and return a Text instance. The follow example is equivalent to the code above:
text = Text.assemble(("Hello", "bold magenta"), " World!") console.print(text)
You can apply a style to given words in the text with
highlight_words() or for ultimate control call
highlight_regex() to highlight text matching a regular expression.
The Text class has a number of parameters you can set on the constructor to modify how the text is displayed.
justifyshould be “left”, “center”, “right”, or “full”, and will override default justify behavior.
overflowshould be “fold”, “crop”, or “ellipsis”, and will override default overflow.
no_wrapprevents wrapping if the text is longer then the available width.
tab_sizeSets the number of characters in a tab.
A Text instance may be used in place of a plain string virtually everywhere in the Rich API, which gives you a lot of control in how text renders within other Rich renderables. For instance, the following example right aligns text within a
from rich import print from rich.panel import Panel from rich.text import Text panel = Panel(Text("Hello", justify="right")) print(panel)