@Tayrus0

Как расположить inline кнопки в pytelegrambotapi?

Я хочу разместить свои кнопки так:
5f79b7150c5ce013523633.png

Но у меня не получается, перепробовал все значения row_width

Создаю кнопки так:
start_markup = telebot.types.InlineKeyboardMarkup(row_width=2)
btn1= telebot.types.InlineKeyboardButton(
    'действие 1', callback_data='1')
btn2= telebot.types.InlineKeyboardButton(
    'действие 2', callback_data='1')
start_markup.add(btn1, btn2)


Как расположить кнопки так же как и на картинке?
  • Вопрос задан
  • 10390 просмотров
Решения вопроса 1
@twistfire92
Python backend developer
Row_width не обязательно указывать вообще. По умолчанию значение равно 3.
Т.е. если просто в объект InlineKeyboardMarkup добавлять кнопки поочередно, они будут выстраиваться линиями по 3 кнопки в ряд.

Вам надо использовать метод row(), передавая туда список объектов InlineKeyboardButton

Т.е. если ориентироваться на ваш скрин, то располагать кнопки следует следующим образом:
start_markup = telebot.types.InlineKeyboardMarkup()

# первый ряд (две кнопки)
btn1= telebot.types.InlineKeyboardButton('действие 1', callback_data='1')
btn2= telebot.types.InlineKeyboardButton('действие 2', callback_data='2')
start_markup.row(btn1, btn2)

# второй ряд (одна кнопка)
btn3= telebot.types.InlineKeyboardButton('действие 3', callback_data='3')
start_markup.row(btn3)

# третий ряд (две кнопки)
btn4= telebot.types.InlineKeyboardButton('действие 4', callback_data='4')
btn5= telebot.types.InlineKeyboardButton('действие 5', callback_data='5')
start_markup.row(btn4, btn5)

# четвертый ряд (две кнопки)
btn6= telebot.types.InlineKeyboardButton('действие 6', callback_data='6')
btn7= telebot.types.InlineKeyboardButton('действие 7', callback_data='7')
start_markup.row(btn6, btn7)

# пятый ряд (одна кнопка)
btn8= telebot.types.InlineKeyboardButton('действие 8', callback_data='8')
start_markup.row(btn8)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@dGololobov
начинающий
Структура кнопок в Telegram - это массив массивов, о чем любезно нам сообщили разработчики в документации Bot API.
Не знаю как там в ваших питонах, и конкретно в pytelegrambotapi это реализовано, но итоговый JSON должен выглядеть примерно так:

{
 reply_markup: {
     inline_keyboard: [
          [{ text: 'but 1', callback_data: 'but1data' }, { text: 'but 2', callback_data: 'but2data' }],
          [{ text: 'but 3', callback_data: 'but3data' }],
          [{ text: 'but 4', callback_data: 'but4data' }, { text: 'but 5', callback_data: 'but5data' }],
          [{ text: 'but 6', callback_data: 'but6data' }]
      ]
   }
}


Исходя из этого попробуйте добавить вместо отдельных кнопок, в качестве параметров функции start_markup.add(), массив [ but1, bu2]
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы