Форум сайта python.su
Есть функция, в которую передается список со строками подписей кнопок, которые выводятся в чат-боте Телеграм. Сами кнопки добавляются с помощью метода add() класса ReplyKeyboardMarkup.
Проблема в том, что если вызывать метод add() последовательно для добавления каждой кнопки (variant 2 В коде), то кнопки добавляются просто в колонку - одна над другой, а если передать все созданные кнопки сразу как позиционные аргументы, то кнопки выглядят как надо - располагаются пропорционально.
Я конечно выкрутился через подсчёт количества элементов в списке и дальше через elif (variant 1 в коде): но уверен что это говнокод и должен быть в Пайтоне какой-то более гибкий и изящный метод.
def create_reply_buttons(buttons_list): markup = types.ReplyKeyboardMarkup(row_width=2, resize_keyboard=True, selective=False, one_time_keyboard=False, input_field_placeholder='') b = [types.KeyboardButton(buttons_list[i]) for i in range(len(buttons_list))] variant = 1 if variant == 1: __b: int = len(buttons_list) if __b==0: return elif __b==1: markup.add(b[0]) elif __b==2: markup.add(b[0], b[1]) elif __b == 3: markup.add(b[0], b[1], b[2]) elif variant == 2: for i in buttons_list: itembtn = types.KeyboardButton(i) markup.add(itembtn)
Отредактировано vadim_matveev (Апрель 13, 2022 12:52:10)
Офлайн
Решение найдено. Оказывается можно не только принимать переменное количество аргументов через ‘*’, но и передавать:
buttons = [types.KeyboardButton(btn) for btn in buttons_list] markup.add(*buttons)
Отредактировано vadim_matveev (Апрель 13, 2022 15:15:16)
Офлайн