如何使用电报bot api以编程方式使用python创建垂直自定义键盘布局?

时间:2016-09-24 06:35:22

标签: python telegram python-telegram-bot

我试图使用telepot api包装器创建一个基于卡片的游戏机器人,但是我无法弄清楚如何使用垂直布局而不是水平布局

示例代码:

keyboard = []
for card in data['current_games'][userGame]['players'][messageLocationID]['cards']:
    button = [KeyboardButton(text=card)]
    keyboard += button

然后我将sendMessage()方法与ReplyKeyboardMarkup()方法一起使用,但它会创建一行高而薄的按钮,这会影响文本的显示。

我是否缺少一个步骤?我能够使用:

创建一个方形的键
keyboard = [[KeyboardButton(text='0'), KeyboardButton(text='1'), KeyboardButton(text='2'), KeyboardButton(text='3')],
            [KeyboardButton(text='4'), KeyboardButton(text='5'), KeyboardButton(text='6'), KeyboardButton(text='7')],
            [KeyboardButton(text='8'), KeyboardButton(text='9'), KeyboardButton(text='10'), KeyboardButton(text='11')],
            [KeyboardButton(text='12'), KeyboardButton(text='13'), KeyboardButton(text='14'), KeyboardButton(text='15')]]

我只使用第二种方法创建了一个键盘,因为我能够手动创建它而不是以编程方式创建键盘,但是我没有办法处理卡片列表而不按顺序访问每张卡片,因为它'动态列表随每个回合而变化。

我查看了api笔记,但我找不到任何可以使用的内容

我假设基于第二个键盘的结果,我可以通过使每个卡成为一个数组来创建垂直行,因此它将嵌套在原始数组中,但事实证明并非如此。

我错过了一步吗?

1 个答案:

答案 0 :(得分:0)

由于电报中的键盘是字符串数组的数组首先,你应该创建一个"按钮行" (第一个数组)和仅在此之后将其添加到键盘(第二个数组)作为一个元素。像这样:

keyboard = []
row1 = ["card1", "card2", "card3"]
keyboard.append(row1)
row2 = ["card4", "card5", "card6"]
keyboard.append(row2)
print (keyboard)

>>>
[['card1', 'card2', 'card3'], ['card4', 'card5', 'card6']]

您可以将其置于一个循环中,因此可以根据需要动态创建。