Constructing InlineKeyboardButton Dynamically in Python
Question:
I want to create a InlineKeyboardButton for Telegram in python like below function but I want to do it dynamically. This function groups two buttons in one line and add one button to second line. I want to make two button each line.
def options(bot, update):
keyboard = [[InlineKeyboardButton("Option 1", callback_data='1'),
InlineKeyboardButton("Option 2", callback_data='2')],
[InlineKeyboardButton("Option 3", callback_data='3')]]
reply_markup = InlineKeyboardMarkup(keyboard)
update.message.reply_text('Please choose:', reply_markup = reply_markup)
But what ever i try, i got error message like
data['inline_keyboard'].append([x.to_dict() for x in inline_keyboard])
AttributeError: 'list' object has no attribute 'to_dict'
My code is as follows:
def create_options(self, gid, Events):
opts = []
o = []
keyboard = []
for i, events in enumerate(Events):
if (events.gid == gid):
o.append([[InlineKeyboardButton(events.etkinlik + u" ", callback_data=i),InlineKeyboardButton(events.etkinlik + u" ", callback_data=i)]])
opts.append(o)
keyboard.append(opts)
return InlineKeyboardMarkup(keyboard)
Could you suggest where i am doing wrong.
Thanks a lot for your help
Answers:
i found the solution, if i code this way it works as i wanted.
keyboard = []
for i, events in enumerate(Events):
if (events.gid == gid):
keyboard = keyboard +
[[InlineKeyboardButton(events.etkinlik + u" ", callback_data=i),
InlineKeyboardButton(events.etkinlik + u" ", callback_data=i + 100)]]
return InlineKeyboardMarkup(keyboard)
This is a pretty neat way to do it:
sample_buttons = ['A', 'B', 'C', 'D']
keyboard = []
for i, button in enumerate(sample_buttons):
keyboard.append([InlineKeyboardButton(button, callback_data=i)])
reply_markup = InlineKeyboardMarkup(keyboard)
update.message.reply_text('Please choose:', reply_markup = reply_markup)
I want to create a InlineKeyboardButton for Telegram in python like below function but I want to do it dynamically. This function groups two buttons in one line and add one button to second line. I want to make two button each line.
def options(bot, update):
keyboard = [[InlineKeyboardButton("Option 1", callback_data='1'),
InlineKeyboardButton("Option 2", callback_data='2')],
[InlineKeyboardButton("Option 3", callback_data='3')]]
reply_markup = InlineKeyboardMarkup(keyboard)
update.message.reply_text('Please choose:', reply_markup = reply_markup)
But what ever i try, i got error message like
data['inline_keyboard'].append([x.to_dict() for x in inline_keyboard])
AttributeError: 'list' object has no attribute 'to_dict'
My code is as follows:
def create_options(self, gid, Events):
opts = []
o = []
keyboard = []
for i, events in enumerate(Events):
if (events.gid == gid):
o.append([[InlineKeyboardButton(events.etkinlik + u" ", callback_data=i),InlineKeyboardButton(events.etkinlik + u" ", callback_data=i)]])
opts.append(o)
keyboard.append(opts)
return InlineKeyboardMarkup(keyboard)
Could you suggest where i am doing wrong.
Thanks a lot for your help
i found the solution, if i code this way it works as i wanted.
keyboard = []
for i, events in enumerate(Events):
if (events.gid == gid):
keyboard = keyboard +
[[InlineKeyboardButton(events.etkinlik + u" ", callback_data=i),
InlineKeyboardButton(events.etkinlik + u" ", callback_data=i + 100)]]
return InlineKeyboardMarkup(keyboard)
This is a pretty neat way to do it:
sample_buttons = ['A', 'B', 'C', 'D']
keyboard = []
for i, button in enumerate(sample_buttons):
keyboard.append([InlineKeyboardButton(button, callback_data=i)])
reply_markup = InlineKeyboardMarkup(keyboard)
update.message.reply_text('Please choose:', reply_markup = reply_markup)