Кнопки должны отображаться каждая в отдельной строке

В этом варианте кода должно появляться меню с кнопками, берущими информацию из JSON-файла, количество кнопок может варьироваться (в тестовом варианте их 3). Проблема в том, что кнопки отображаются в одной строке, а должны отображаться каждая в отдельной строке. Далее по коду при нажатии кнопки будет вызываться следующее меню с выбором:

with open('menu.json', 'r', encoding='utf-8') as f:
    MENU = json.load(f)

    @dp.message(lambda message: message.text.casefold() == '? меню')
    async def show_menu(message: types.Message):
        text = '☕ *Меню кав’ярні:*\n\n'
        menu_buttons = InlineKeyboardBuilder()
    
        # Додаємо категорії
        text += 'Виберіть категорію товарів:\n'
        
        for category in MENU['categories']:
            # Додаємо кнопку для кожної категорії
            menu_buttons.button(text=category['name'], callback_data=f'category_{category["id"]}')
    
        # Відправляємо повідомлення з меню
        await message.answer(text, reply_markup=menu_buttons.as_markup(resize_keyboard=True))

Ответы (1 шт):

Автор решения: Sherlock

У InlineKeyboardBuilder есть параметр adjust который как раз и отвечает за сетку кнопок, после вашего цикла, вы можете указать menu_buttons.adjust(1) и ваши кнопки будут каждая в своем ряду.

with open('menu.json', 'r', encoding='utf-8') as f:
    MENU = json.load(f)

    @dp.message(lambda message: message.text.casefold() == '? меню')
    async def show_menu(message: types.Message):
        text = '☕ *Меню кав’ярні:*\n\n'
        menu_buttons = InlineKeyboardBuilder()

        # Додаємо категорії
        text += 'Виберіть категорію товарів:\n'
    
        for category in MENU['categories']:
            # Додаємо кнопку для кожної категорії
            menu_buttons.button(text=category['name'], callback_data=f'category_{category["id"]}')

        menu_buttons.adjust(1) # <- ТУТ НОВОЕ

        # Відправляємо повідомлення з меню
        await message.answer(text, reply_markup=menu_buttons.as_markup(resize_keyboard=True))
→ Ссылка