问题描述
我在数组中动态创建了按钮
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_":
,但我如何获取按钮文本?
解决方法
当用户点击带有 ListTile
的 InlineKeyboardButton
时,会产生 callback_data
。 CallbackQuery
不包含有关被点击的按钮文本的信息,而只包含有关该按钮所具有的 CallbackQuery
的信息。因此,如果您想知道与该按钮相关联的文本,我建议使每个按钮的 callback_data
唯一。你可以
- 将该文本直接放入
callback_data
- 使
callback_data
成为一些唯一标识符并存储映射标识符 → 文本 - 使
callback_data
成为一些唯一标识符,并通过检查callback_data
中的哪个按钮具有callback_query.message.reply_markup.keyboard
来提取文本。请注意,这不适用于来自内联消息的回调查询,是那些不带callback_data
我个人推荐第二种解决方案。