textual/docs/widgets/selection_list.md
TomJGooding c41c531431
docs: update selection list messages docs (#4399)
* remove selection toggled note

* update selected changed docstring

* add event handler to selected changed docstring

* remove differentiation of user interaction and API
2024-04-16 15:05:42 +01:00

4.5 KiB

SelectionList

!!! tip "Added in version 0.27.0"

A widget for showing a vertical list of selectable options.

  • Focusable
  • Container

Typing

The SelectionList control is a Generic, which allows you to set the type of the [selection values][textual.widgets.selection_list.Selection.value]. For instance, if the data type for your values is an integer, you would type the widget as follows:

selections = [("First", 1), ("Second", 2)]
my_selection_list: SelectionList[int] =  SelectionList(*selections)

!!! note

Typing is entirely optional.

If you aren't familiar with typing or don't want to worry about it right now, feel free to ignore it.

Examples

A selection list is designed to be built up of single-line prompts (which can be Rich Text) and an associated unique value.

Selections as tuples

A selection list can be built with tuples, either of two or three values in length. Each tuple must contain a prompt and a value, and it can also optionally contain a flag for the initial selected state of the option.

=== "Output"

```{.textual path="docs/examples/widgets/selection_list_tuples.py"}
```

=== "selection_list_tuples.py"

~~~python
--8<-- "docs/examples/widgets/selection_list_tuples.py"
~~~

1. Note that the `SelectionList` is typed as `int`, for the type of the values.

=== "selection_list.tcss"

~~~css
--8<-- "docs/examples/widgets/selection_list.tcss"
~~~

Selections as Selection objects

Alternatively, selections can be passed in as [Selection][textual.widgets.selection_list.Selection]s:

=== "Output"

```{.textual path="docs/examples/widgets/selection_list_selections.py"}
```

=== "selection_list_selections.py"

~~~python
--8<-- "docs/examples/widgets/selection_list_selections.py"
~~~

1. Note that the `SelectionList` is typed as `int`, for the type of the values.

=== "selection_list.tcss"

~~~css
--8<-- "docs/examples/widgets/selection_list.tcss"
~~~

Handling changes to the selections

Most of the time, when using the SelectionList, you will want to know when the collection of selected items has changed; this is ideally done using the [SelectedChanged][textual.widgets.SelectionList.SelectedChanged] message. Here is an example of using that message to update a Pretty with the collection of selected values:

=== "Output"

```{.textual path="docs/examples/widgets/selection_list_selected.py"}
```

=== "selection_list_selections.py"

~~~python
--8<-- "docs/examples/widgets/selection_list_selected.py"
~~~

1. Note that the `SelectionList` is typed as `str`, for the type of the values.

=== "selection_list.tcss"

~~~css
--8<-- "docs/examples/widgets/selection_list_selected.tcss"
~~~

Reactive Attributes

Name Type Default Description
highlighted int | None None The index of the highlighted selection. None means nothing is highlighted.

Messages

  • [SelectionList.SelectionHighlighted][textual.widgets.SelectionList.SelectionHighlighted]
  • [SelectionList.SelectionToggled][textual.widgets.SelectionList.SelectionToggled]
  • [SelectionList.SelectedChanged][textual.widgets.SelectionList.SelectedChanged]

Bindings

The selection list widget defines the following bindings:

::: textual.widgets.SelectionList.BINDINGS options: show_root_heading: false show_root_toc_entry: false

It inherits from [OptionList][textual.widgets.OptionList] and so also inherits the following bindings:

::: textual.widgets.OptionList.BINDINGS options: show_root_heading: false show_root_toc_entry: false

Component Classes

The selection list provides the following component classes:

::: textual.widgets.SelectionList.COMPONENT_CLASSES options: show_root_heading: false show_root_toc_entry: false

It inherits from [OptionList][textual.widgets.OptionList] and so also makes use of the following component classes:

::: textual.widgets.OptionList.COMPONENT_CLASSES options: show_root_heading: false show_root_toc_entry: false

::: textual.widgets.SelectionList options: heading_level: 2

::: textual.widgets.selection_list options: heading_level: 2