checkbox inline button in aiogram python

i have this aiogram inline buttons

      from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton
from middlewares.internationlization import _

choise_sign_select_company = InlineKeyboardMarkup(row_width=1,
inline_keyboard=[
    [
        InlineKeyboardButton(
            text=_('Капитализация ❌'),
            callback_data='market_cap_of_company'
        ),
        InlineKeyboardButton(
            text=_('Кол-во акций ❌'),
            callback_data='count_shares_ofustanding_of_company'
        )
    ],
    [
        InlineKeyboardButton(
            text=_('Цена акции ❌'),
            callback_data='current_prise_share_now_of_company'
        )
    ]
])

how to turn these buttons into a check of a button? For example, so that when you click on the "Capitalization ❌" button, the button changes to "Capitalization ✅" (when you click it again, it goes back)
and also the value was stored in the call.data from callback_data

Here comes the keyboard

      @dp.message_handler(text='Подобрать компании 🤑')
async def select_sign(message: types.Message):
    await message.answer(_('Выберите признаки на которых будет основываться подбор'), 
    reply_markup=choise_sign_select_company)
    await SelectCompanies.enter_the_sign.set()

click on the button is processed here

      @dp.callback_query_handler(state=SelectCompanies.enter_the_sign)
async def select_interval(call: types.CallbackQuery):
   text = call.data
   await call.answer(text)

2 ответа

Можешь попробовать:

      from aiogram_dialog import DialogManager, ChatEvent
from aiogram_dialog.widgets.kbd import Checkbox, ManagedCheckboxAdapter
from aiogram_dialog.widgets.text import Const


async def check_changed(event: ChatEvent, checkbox: ManagedCheckboxAdapter, manager: DialogManager):
    print("Check status changed:", checkbox.is_checked())


check = Checkbox(
    Const("✓  Checked"),
    Const("Unchecked"),
    id="check",
    default=True,  # so it will be checked by default,
    on_state_changed=check_changed,
)

Вы можете вручную реализовать эту функцию с помощью обратных вызовов.
Например, сохранить текущее состояние кнопки в обратном вызове и изменить его после нажатия.

Также есть библиотека айограмм-диалогов . Там вы можете найти специальную кнопку "флажок"

Другие вопросы по тегам