Skip to content

Rule

A rule widget to separate content, similar to a <hr> HTML tag.

  • Focusable
  • Container

Examples

Horizontal Rule

The default orientation of a rule is horizontal.

The example below shows horizontal rules with all the available line styles.

HorizontalRulesApp                         solid (default)                          ────────────────────────────────────────────────────────────────                              heavy                               ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━                              thick                               ████████████████████████████████████████████████████████████████                              dashed                              ╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍                              double                              ════════════════════════════════════════════════════════════════                              ascii                               ----------------------------------------------------------------

from textual.app import App, ComposeResult
from textual.containers import Vertical
from textual.widgets import Label, Rule


class HorizontalRulesApp(App):
    CSS_PATH = "horizontal_rules.tcss"

    def compose(self) -> ComposeResult:
        with Vertical():
            yield Label("solid (default)")
            yield Rule()
            yield Label("heavy")
            yield Rule(line_style="heavy")
            yield Label("thick")
            yield Rule(line_style="thick")
            yield Label("dashed")
            yield Rule(line_style="dashed")
            yield Label("double")
            yield Rule(line_style="double")
            yield Label("ascii")
            yield Rule(line_style="ascii")


if __name__ == "__main__":
    app = HorizontalRulesApp()
    app.run()
Screen {
    align: center middle;
}

Vertical {
    height: auto;
    width: 80%;
}

Label {
    width: 100%;
    text-align: center;
}

Vertical Rule

The example below shows vertical rules with all the available line styles.

VerticalRulesApp solid heavy thick dasheddoubleascii | | | | | | | | | | | | | | | | | | |

from textual.app import App, ComposeResult
from textual.containers import Horizontal
from textual.widgets import Label, Rule


class VerticalRulesApp(App):
    CSS_PATH = "vertical_rules.tcss"

    def compose(self) -> ComposeResult:
        with Horizontal():
            yield Label("solid")
            yield Rule(orientation="vertical")
            yield Label("heavy")
            yield Rule(orientation="vertical", line_style="heavy")
            yield Label("thick")
            yield Rule(orientation="vertical", line_style="thick")
            yield Label("dashed")
            yield Rule(orientation="vertical", line_style="dashed")
            yield Label("double")
            yield Rule(orientation="vertical", line_style="double")
            yield Label("ascii")
            yield Rule(orientation="vertical", line_style="ascii")


if __name__ == "__main__":
    app = VerticalRulesApp()
    app.run()
Screen {
    align: center middle;
}

Horizontal {
    width: auto;
    height: 80%;
}

Label {
    width: 6;
    height: 100%;
    text-align: center;
}

Reactive Attributes

Name Type Default Description
orientation RuleOrientation "horizontal" The orientation of the rule.
line_style LineStyle "solid" The line style of the rule.

Messages

This widget sends no messages.

Bindings

This widget has no bindings.

Component Classes

This widget has no component classes.


Bases: Widget

A rule widget to separate content, similar to a <hr> HTML tag.

Parameters:

Name Type Description Default

orientation

RuleOrientation

The orientation of the rule.

'horizontal'

line_style

LineStyle

The line style of the rule.

'solid'

name

str | None

The name of the widget.

None

id

str | None

The ID of the widget in the DOM.

None

classes

str | None

The CSS classes of the widget.

None

disabled

bool

Whether the widget is disabled or not.

False

line_style class-attribute instance-attribute

line_style = line_style

The line style of the rule.

orientation class-attribute instance-attribute

orientation = orientation

The orientation of the rule.

horizontal classmethod

horizontal(
    line_style="solid",
    name=None,
    id=None,
    classes=None,
    disabled=False,
)

Utility constructor for creating a horizontal rule.

Parameters:

Name Type Description Default

line_style

LineStyle

The line style of the rule.

'solid'

name

str | None

The name of the widget.

None

id

str | None

The ID of the widget in the DOM.

None

classes

str | None

The CSS classes of the widget.

None

disabled

bool

Whether the widget is disabled or not.

False

Returns:

Type Description
Rule

A rule widget with horizontal orientation.

vertical classmethod

vertical(
    line_style="solid",
    name=None,
    id=None,
    classes=None,
    disabled=False,
)

Utility constructor for creating a vertical rule.

Parameters:

Name Type Description Default

line_style

LineStyle

The line style of the rule.

'solid'

name

str | None

The name of the widget.

None

id

str | None

The ID of the widget in the DOM.

None

classes

str | None

The CSS classes of the widget.

None

disabled

bool

Whether the widget is disabled or not.

False

Returns:

Type Description
Rule

A rule widget with vertical orientation.

textual.widgets.rule

LineStyle module-attribute

LineStyle = Literal[
    "ascii",
    "blank",
    "dashed",
    "double",
    "heavy",
    "hidden",
    "none",
    "solid",
    "thick",
]

The valid line styles of the rule widget.

RuleOrientation module-attribute

RuleOrientation = Literal['horizontal', 'vertical']

The valid orientations of the rule widget.

InvalidLineStyle

Bases: Exception

Exception raised for an invalid rule line style.

InvalidRuleOrientation

Bases: Exception

Exception raised for an invalid rule orientation.