通过单击动态内联按钮创建处理程序

问题描述

我在数组中动态创建了按钮

keyboard = InlineKeyboardMarkup()
keyboard.row_width = 2
for i in range(0,len(adress)):
    keyboard.add(InlineKeyboardButton(adress[i].text,callback_data="address_"))
bot.send_message(cid,'Выберите адрес парковки',reply_markup=keyboard)

如何跟踪其中一个按钮的点击并从中获取文本?我将所有按钮设置为相同的 callback_data。也许您可以这样做 if call. data = = "address_":,但我如何获取按钮文本?

解决方法

当用户点击带有 ListTileInlineKeyboardButton 时,会产生 callback_dataCallbackQuery 不包含有关被点击的按钮文本的信息,而只包含有关该按钮所具有的 CallbackQuery 的信息。因此,如果您想知道与该按钮相关联的文本,我建议使每个按钮的 callback_data 唯一。你可以

  • 将该文本直接放入 callback_data
  • 使 callback_data 成为一些唯一标识符并存储映射标识符 → 文本
  • 使 callback_data 成为一些唯一标识符,并通过检查 callback_data 中的哪个按钮具有 callback_query.message.reply_markup.keyboard 来提取文本。请注意,这不适用于来自内联消息的回调查询,是那些不带 callback_data

我个人推荐第二种解决方案。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...