Multiselect#
Multiselect is another kind of stateful selection widget.
It very similar to Radio
but remembers multiple selected items
Same as for Radio
you should pass two texts (for checked and unchecked items). Passed data is the same as for Select
import operator
from aiogram_dialog.widgets.kbd import Multiselect
from aiogram_dialog.widgets.text import Format
# let's assume this is our window data getter
async def get_data(**kwargs):
fruits = [
("Apple", '1'),
("Pear", '2'),
("Orange", '3'),
("Banana", '4'),
]
return {
"fruits": fruits,
"count": len(fruits),
}
fruits_kbd = Multiselect(
Format("✓ {item[0]}"), # E.g `✓ Apple`
Format("{item[0]}"),
id="m_fruits",
item_id_getter=operator.itemgetter(1),
items="fruits",
)
After few clicks it will look like:
Other useful options are:
min_selected
- limits minimal number of selected items ignoring clicks if this restriction is violated. It does not affect initial state.max_selected
- limits maximal number of selected itemson_state_changed
- callback function. Called when item changes selected state
To work with selection you can use this methods:
get_checked
- returns a list of ids of all selected itemsis_checked
- returns if certain id is currently selectedset_checked
- changes selection state of provided idreset_checked
- resets all checked items to unchecked state
Warning
Multiselect
widgets stores state of all checked items even if they disappear from window data.
It is very useful when you have pagination, but might be unexpected when data is really removed.
Classes#
- class aiogram_dialog.widgets.kbd.select.OnItemStateChanged(*args, **kwargs)#
- abstract async __call__(event, select, dialog_manager, data)#
Call self as a function.
- Parameters:
event (CallbackQuery | Message | DialogUpdateEvent | ChatMemberUpdated) –
select (ManagedT) –
dialog_manager (DialogManager) –
data (T) –
- class aiogram_dialog.widgets.kbd.select.OnItemClick(*args, **kwargs)#
- abstract async __call__(event, select, dialog_manager, data)#
Call self as a function.
- Parameters:
event (CallbackQuery) –
select (ManagedT) –
dialog_manager (DialogManager) –
data (T) –
- class aiogram_dialog.widgets.kbd.Multiselect(checked_text, unchecked_text, id, item_id_getter, items, min_selected=0, max_selected=0, type_factory=<class 'str'>, on_click=None, on_state_changed=None, when=None)#
- Parameters:
checked_text (Text) –
unchecked_text (Text) –
id (str) –
item_id_getter (Callable[[Any], str | int]) –
items (str | Callable[[Dict], Sequence] | MagicFilter | Sequence) –
min_selected (int) –
max_selected (int) –
type_factory (Callable[[str], T]) –
on_click (OnItemClick[ManagedMultiselect[T], T] | WidgetEventProcessor | None) –
on_state_changed (OnItemStateChanged[ManagedMultiselect[T], T] | WidgetEventProcessor | None) –
when (str | Callable) –
- __init__(checked_text, unchecked_text, id, item_id_getter, items, min_selected=0, max_selected=0, type_factory=<class 'str'>, on_click=None, on_state_changed=None, when=None)#
- Parameters:
checked_text (Text) –
unchecked_text (Text) –
id (str) –
item_id_getter (Callable[[Any], str | int]) –
items (str | Callable[[Dict], Sequence] | MagicFilter | Sequence) –
min_selected (int) –
max_selected (int) –
type_factory (Callable[[str], T]) –
on_click (OnItemClick[ManagedMultiselect[T], T] | WidgetEventProcessor | None) –
on_state_changed (OnItemStateChanged[ManagedMultiselect[T], T] | WidgetEventProcessor | None) –
when (str | Callable | None) –
- class aiogram_dialog.widgets.kbd.ManagedMultiselect(widget, manager)#
- Parameters:
widget (W) –
manager (DialogManager) –
- get_checked()#
Get a list of checked items ids.
- Return type:
List[T]
- is_checked(item_id)#
Get if an item identified by
item_id
is checked.- Parameters:
item_id (T) –
- Return type:
bool
- async reset_checked()#
Reset all items to their default state.
- async set_checked(item_id, checked)#
Set an item identified by
item_id
as checked or unchecked.- Parameters:
item_id (T) –
checked (bool) –
- Return type:
None