Как создать клавиши с названиями из списка?
библиотека aiogam. У меня есть список, и нужно чтобы создались кнопки типа KeyboardButton с названиями из этого списка. Т.е. допустим список такой [('print',), ('enter',), ('delete',), ('add',), ('home',)] (этот список получается из запроса в бд). И нужно чтобы создалось 5 кнопок(именно столько элементов в списке) типа KeyboardButton(клавиатура грубо говоря), с соответствующими названиями.
async def choice_cat(message):
CATs = cur.execute(f'SELECT name FROM cathlete WHERE id = "{message.from_user.id}"').fetchall()
for fds in range(len(CATs)):
astt = ReplyKeyboardMarkup(resize_keyboard=True).add(KeyboardButton(f"CATs[{fds}]"))
То что начинается с "for", к осмыслению не принимать, моя больная фантазия! Пытаюсь методом тыка найти способ, но безуспешно(
Ответы (1 шт):
async def choice_cat(message):
CATs = cur.execute(f'SELECT name FROM cathlete WHERE id = "{message.from_user.id}"').fetchall()
astt = ReplyKeyboardMarkup(resize_keyboard=True)
for i in CATs:
astt.add(KeyboardButton(i[0]))
Я вынес
astt = ReplyKeyboardMarkup(resize_keyboard=True)
за цикл.
Если оставить его там, то получается, что каждую итерацию вы заново создаёте клавиатуру, а прошлая с прошлыми кнопками - удаляется. Также, итерироваться наверное можно прямо по списку, а не по длине. Хотя, дело вкуса
Правка
Не заметил ошибку в запросе и получении аргумента, должно быть так
from aiogram import types
async def choice_cat(message: types.Message):
CATs = cur.execute(f'SELECT name FROM cathlete WHERE id=?', (message.from_user.id, )).fetchall()