代码之家  ›  专栏  ›  技术社区  ›  GurhanCagin

在Python中动态构造InlineKeyboardButton

  •  2
  • GurhanCagin  · 技术社区  · 8 年前

    我想创建一个 内联键盘按钮 对于python中的电报,如下面的函数,但我想动态地执行它。此功能将两个按钮分组在一行中,并将一个按钮添加到第二行。我想每行做两个按钮。

    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)
    

    但不管我怎么做,我都会收到这样的错误信息

    data['inline_keyboard'].append([x.to_dict() for x in inline_keyboard])
    AttributeError: 'list' object has no attribute 'to_dict'
    

    我的代码如下:

    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)
    

    你能告诉我哪里做错了吗。

    非常感谢你的帮助

    1 回复  |  直到 8 年前
        1
  •  0
  •   GurhanCagin    8 年前

    我找到了解决方案,如果我这样编码,它就会按我想要的那样工作。

    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)
    
    推荐文章