Layout
Layout
marimo
provides functions to help you lay out your output, such as in rows and columns, accordions, tabs, and callouts. ## Rows and columns
Arrange objects into rows and columns with mo.hstack
and mo.vstack
.
mo.hstack
with mo.vstack
to make grids:
mo.hstack
to mo.vstack
(including
plots!).
Customization. The presentation of stacked elements can be customized with some arguments that are best understood by example.
def hstack(items: Sequence[object], justify: Literal['start', 'center',
'end', 'space-between', 'space-around'] = 'space-between',
align: Optional[Literal['start', 'end', 'center', 'stretch']] = None,
wrap: bool = False, gap: float = 0.5, widths: Optional[Literal['equal'] |
Sequence[float]] = None) -> Html:
vstack
to build a grid.
Examples:
Build a row of items:
# Build a row of items
mo.hstack([mo.md("..."), mo.ui.text_area()])
mo.hstack([mo.md("..."), mo.ui.text_area()], widths="equal")
mo.hstack(
[mo.plain_text("..."), mo.ui.text_area(full_width=True)],
widths=[0, 1],
)
# Build a grid.
mo.hstack(
[
mo.vstack([mo.md("..."), mo.ui.text_area()]),
mo.vstack([mo.ui.checkbox(), mo.ui.text(), mo.ui.date()]),
]
)
items
,
eg, [1, 2] means the second item is twice as wide as the first; or None
for a sensible default.
Returns:
Html: An Html object.def vstack(items: Sequence[object], align: Optional[Literal['start',
'end', 'center', 'stretch']] = None, justify: Literal['start', 'center',
'end', 'space-between', 'space-around'] = 'start', gap: float = 0.5,
heights: Optional[Literal['equal'] | Sequence[float]] = None) -> Html:
hstack
to build a grid of items.
Examples:
Build a column of items:
# Build a column of items
mo.vstack([mo.md("..."), mo.ui.text_area()])
# Build a grid.
mo.vstack(
[
mo.hstack([mo.md("..."), mo.ui.text_area()]),
mo.hstack([mo.ui.checkbox(), mo.ui.text(), mo.ui.date()]),
]
)
items
,
eg, [1, 2] means the second item is twice as tall as the first; or None
for a sensible default.
Returns:
Html: An Html object.Justifying Html
. While you can center or right-justify any object using mo.hstack
, Html
objects (returned by most marimo functions, and subclassed by most marimo classes) have a shortcut using via their center
, right
, and left
methods. This markdown is left-justified.
def center(self) -> Html:
mo.md("# Hello, world").center()
Html
object.def right(self) -> Html:
mo.md("# Hello, world").right()
Html
object.def left(self) -> Html:
mo.md("# Hello, world").left()
Html
object.Accordion
Create expandable shelves of content using mo.accordion
: An accordion can contain multiple items:
multiple=True
to allow multiple items
to be open at the same timeTabs
Use mo.ui.tabs
to display multiple objects in a single tabbed output:
class tabs(tabs: dict[str, object], value: Optional[str] = None, lazy: bool
= False, label: str = '', on_change: Optional[Callable[[str], None]] =
None)
tab1 = mo.vstack([mo.ui.slider(1, 10), mo.ui.text(), mo.ui.date()])
tab2 = mo.md("You can show arbitrary content in a tab.")
tabs = mo.ui.tabs({"Heading 1": tab1, "Heading 2": tab2})
tabs = mo.ui.tabs(
{"Heading 1": tab1, "Heading 2": tab2}, value="Heading 2"
)
tabs = mo.ui.tabs(
{"Heading 1": tab1, "Heading 2": expensive_component}, lazy=True
)
mo.lazy
component. Defaults to False.
label (str, optional): A descriptive name for the tab. Defaults to "".
on_change (Callable[[dict[str, object]], None], optional): Optional callback
to run when this element's value changes.Tree
Display a nested structure of lists, dictionaries, and tuples withmo.tree
:
def tree(items: list[Any] | tuple[Any] | dict[Any, Any],
label: Optional[str] = None) -> Html:
mo.tree(
["entry", "another entry", {"key": [0, 1, 2]}], label="A tree."
)
Html
objectCallout
Turn any markdown or HTML into an emphasized callout with the callout
method:
def callout(value: object, kind: Literal['neutral', 'warn', 'success',
'info', 'danger'] = 'neutral') -> Html: