aiogram 3 python - проблема с InlineKeyboardBuilder
Всем привет, столкнулся с проблемой - моя неопытность, незаконченная база питона. Не могли бы Вы помочь с InlineKeyboardBuilder.
potatiki = ('Красные', 'Зеленые', 'Желтые')
Допустим это наша таблица в базе данных. Как с помощью InlineKeyboardBuilder сделать столько кнопок сколько в этом множестве? И также для каждой кнопки создать callback с уникальным именем?
potatiki = ('Красные', 'Зеленые', 'Желтые')
def potato():
keyboard = InlineKeyboardBuilder()
for potat in potatiki:
keyboard.add(InlineKeyboardButton(text=potat, callback_data="potato"))
return keyboard.adjust(3).as_markup(resize_keyboard=True)
Пытался сделать как-то так, но у каждой кнопки как видите callback один и тот же, так как же сделать чтобы его можно было менять?
Приведу пример: Есть каталог магазина: Шапки - (Крутые, Модные, Стильные): В инлайн кнопки созданные с помощью билдера с названиями Крутые, Модные, Стильные, которые хранились в БД, как дать им разные CallBack
Очень надеюсь на ответ, заранее всем спасибо!
UPD*
def potato():
count = 0
keyboard = InlineKeyboardBuilder()
for potat in potatiki:
keyboard.add(InlineKeyboardButton(text=potat, callback_data="potato" + str(count)))
count += 1
return keyboard.adjust(3).as_markup(resize_keyboard=True)
Сделал такой код, колхоз?
Ответы (1 шт):
Давайте будем ориентироваться на ваш код в "UPD". Буду рассматривать самое простое решение проблемы.
Функция должна быть асинхронной (aiogram все таки)
async def potato():
Думаю, будет удобнее передавать все же список, т.е. заключать значение в квадратные скобки
[]
:potatiki = ['potatik1', 'potatik2' ...]
Удобнее создание кнопок осуществлять не через
keyboard.add
, а черезkeyboard.button
:keyboard.button(text=..., callback_data=...)
В
callback_data
будет везде0
, потому что вы добавляете1
только после самого добавления кнопок, т.е., нужно переставить добавление значения в начало.
После всех этих манипуляций код должен выглядеть так:
async def potato():
count = 0
keyboard = InlineKeyboardBuilder()
for potat in potatiki:
count += 1
keyboard.button(text=potat, callback_data=f'potat_{count}')
return keyboard.adjust(3).as_markup(