Как сделать 2 кнопки в одном ряду, если кнопки берутся из массива, telebot

Имеется код со списком городов

city_list = ['? Абакан', 
'? Арзамас',
'? Артем', 
'? Астрахань', 
'? Балашиха', 
'? Батайск']

И имеется код который создаёт кнопки:

def city_but():
    city_but = ReplyKeyboardMarkup(row_width=2, resize_keyboard=True)
    for city in city_list:
        city_but.add(
            city
        )
    city_but.add(
        "? Главное меню"
    )
    return city_but

В row_width стоит значение 2,по идее должно быть 2 кнопки в одном ряду, но всё равно каждая кнопка в разных рядах, в чем проблема?


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

Автор решения: Violet
  1. Создайте пустой список - keys = [] для хранения кнопок клавиатуры
  2. В цикле добавляйте в список экземпляр KeyboardButton
  3. используйте *keys в city_but.add для добавления все созданных экземпляров кнопок

Итоговый код:

@bot.message_handler(commands=['start'])
def main(message):
    city_list = ['? Абакан',
                 '? Арзамас',
                 '? Артем',
                 '? Астрахань',
                 '? Балашиха',
                 '? Батайск']

    city_but = types.ReplyKeyboardMarkup(row_width=2, resize_keyboard=True)
    keys = []
    for city in city_list:
        keys.append(types.KeyboardButton(city))
    city_but.add(*keys,types.KeyboardButton("? Главное меню"))

    bot.send_message(message.chat.id, 'Привет!', reply_markup=city_but)
→ Ссылка