我试图使用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笔记,但我找不到任何可以使用的内容
我假设基于第二个键盘的结果,我可以通过使每个卡成为一个数组来创建垂直行,因此它将嵌套在原始数组中,但事实证明并非如此。
我错过了一步吗?
答案 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']]
您可以将其置于一个循环中,因此可以根据需要动态创建。