WedX - журнал о программировании и компьютерных науках

Несколько страниц встроенных кнопок

У меня вопрос по поводу встроенных кнопок в телеграмме. Итак, у меня много встроенных кнопок, и я хочу разделить их на несколько страниц. На каждой странице у меня есть кнопки вперед => и назад <= для перемещения между страницами. Щелчок по каждой кнопке возвращает документ.

После вызова встроенной клавиатуры я разместил обработчик, обрабатывающий нажатие каждой кнопки. Кнопки первой страницы работают правильно, кроме кнопок вперед и назад. Страницы не меняются. Я использую библиотеку телеботов.

     bot = telebot.TeleBot(token)
    @bot.message_handler(commands=['start','help'])
    def start(o):
          bot.send_message(o.chat.id,'Hi,use buttons!')

    def name(m):
            keyboard = types.InlineKeyboardMarkup()
            keyboard.add(*[types.InlineKeyboardButton(text=name,callback_data=name) for name
                        in ['button1','button2']])
            keyboard.add(*[types.InlineKeyboardButton(text=name,callback_data=name) for name
                        in ['button3','button4']])
                  keyboard.add(*[types.InlineKeyboardButton(text=name,callback_data=name) for name
                        in ['=>']])
            msg = bot.send_message(m.chat.id,'-----------Choose button----------',reply_markup=keyboard) 
    @bot.callback_query_handler(func=lambda c:True)
    def inline(c):
        if c.data == 'button1':
            bot.send_document(c.message.chat.id,open('button1.pdf', 'rb'))
        elif c.data == 'button2':
            bot.send_document(c.message.chat.id,open('button2.pdf', 'rb'))
        elif c.data == 'button3':
            bot.send_document(c.message.chat.id,open('button3.pdf', 'rb'))
        elif c.data == 'button4' :
            bot.send_document(c.message.chat.id,open('button4.pdf', 'rb'))
        elif c.data == '=>' : 
            keyboard = types.InlineKeyboardMarkup()
            keyboard.add(*[types.InlineKeyboardButton(text=name,callback_data=name) for name
                        in ['button5','button6']])
while True: 
    try:
        bot.polling(none_stop=True)

    except Exception as e:
        print(e)
        time.sleep(15)
12.04.2018

Ответы:


1

При нажатии кнопки => вы просто создаете новую клавиатуру, но не публикуете новую клавиатуру с помощью edit_message_reply_markup.

keyboard = types.InlineKeyboardMarkup()
keyboard.add(*[types.InlineKeyboardButton(text=name,callback_data=name) for name
                    in ['button5','button6']])

bot.edit_message_reply_markup(chat_id=c.message.chat.id, message_id=c.message.message_id, reply_markup=keyboard)
13.04.2018
  • Конечно, отмечу. Но как реализовать эту навигацию. Например, я сейчас на третьей странице и хочу вернуться на вторую и/или я нахожусь на пятой и хочу вернуться на четвертую. Я должен создать цикл или как-то еще. Я понятия не имею, как это сделать 13.04.2018
  • Вам нужно будет использовать callback_data, чтобы проверить, на какой странице вы сейчас находитесь. 13.04.2018
  • Новые материалы

    Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что это выглядит сложно…
    Просто начните и учитесь самостоятельно Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что он кажется мне сложным, и я бросил его. Это в основном инструмент..

    Лицензии с открытым исходным кодом: руководство для разработчиков и создателей
    В динамичном мире разработки программного обеспечения открытый исходный код стал мощной парадигмой, способствующей сотрудничеству, инновациям и прогрессу, движимому сообществом. В основе..

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..


    Для любых предложений по сайту: [email protected]