Как изменить текст кнопки по нажатию aiogram?
Есть код:
def ishod_keyboard():
eg_btn = InlineKeyboardButton('❌ Пиццу', callback_data='❌ Пиццу')
steam_btn = InlineKeyboardButton('❌ Суши', callback_data='❌ Суши')
requests_kb = InlineKeyboardMarkup(row_width=2).add(
eg_btn, steam_btn
)
return requests_kb
@dp.callback_query_handler(lambda c: c.data == 'cart')
async def cmd_cart(callback: types.CallbackQuery):
await callback.message.edit_text('Что будем заказывать?', reply_markup=markups.ishod_keyboard())
Как сделать так, чтобы по нажатию на кнопку, вместо крестика была галочка и наоборот?
Ответы (1 шт):
Автор решения: KJlUK_KJIAK
→ Ссылка
добавить state для сохранения состояния кнопки:
def ishod_keyboard():
eg_btn = InlineKeyboardButton('❌ Пиццу', callback_data='eg_0')
steam_btn = InlineKeyboardButton('❌ Суши', callback_data='steam_0')
requests_kb = InlineKeyboardMarkup(row_width=2).add(
eg_btn, steam_btn
)
return requests_kb
@dp.callback_query_handler(lambda c: c.data == 'cart')
async def cmd_cart(callback: types.CallbackQuery):
markup = ishod_keyboard()
msg = await callback.message.edit_text('Что будем заказывать?', reply_markup=markup)
@dp.callback_query_handler(lambda c: c.data.startswith(('eg_', 'steam_')))
async def on_keyboard_callback(callback_query: types.CallbackQuery):
callback_data = callback_query.data
button_state = int(callback_data.split('_')[-1])
button_label = callback_data.split(' ')[-1]
if button_state == 0:
new_button_state = 1
new_button_label = '✅ ' + button_label[2:]
else:
new_button_state = 0
new_button_label = '❌ ' + button_label[2:]
new_callback_data = f"{callback_data.split('_')[0]}_{new_button_state}"
markup = InlineKeyboardMarkup(row_width=2).add(
InlineKeyboardButton(new_button_label, callback_data=new_callback_data)
)
await bot.edit_message_reply_markup(
callback_query.message.chat.id,
callback_query.message.message_id,
reply_markup=markup
)