Как создать клавиши с названиями из списка?

библиотека 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 шт):

Автор решения: VlasssaDassa
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()
→ Ссылка