Найти - Пользователи
Полная версия: Какой формат аргументов у markup.row (Telegram API)
Начало » Python для новичков » Какой формат аргументов у markup.row (Telegram API)
1
a.j.
Всем.

В статическом варианте, по советам авторов статей в инете, для компоновки набора кнопок в окне ввода аргументы в markup.row передаются так:

 markup.row('1','2','3')

Нужно генерить кнопки динамически.

 buttons=()
for k in bot_menu:
	buttons.append(k["id"])
...
markup.row(buttons)

В k “id” лежат подписи кнопок.

Результат - ошибка:

AttributeError: ‘list’ object has no attribute ‘to_dic’

Можно попробовать другой тип данных:

 buttons={}
index=1
for k in bot_menu:
	buttons[index]=k["id"]
	index+=1

Ну или другие типы массивов. Ошибка та же.

Как передать динамически перечень кнопок? Может, какой-то “ну совсем другой” формат требуется?
py.user.next
  
tup = ('1','2','3')
 
markup.row(*tup)
a.j.
Во-первых, я собираю массив с помощью append. Преобразую через tuple().
Аргумент вида *buttons дал ошибку ту же, только с другим типом: ‘int’ object has no attribute ‘to_dic’
FishHook
a.j.
Во-первых
Во-первых, если у вас есть глаза, то вы могли бы увидеть в трейсбэке ошибки строку, на которой ваша программа падает.
AttributeError: ‘list’ object has no attribute ‘to_dic’
логично предположить, что ошибка возникает при чтении атрибута to_dic из списка.

Во-вторых, вы дали огрызки кода, в которых нет ни одного упоминания о ‘to_dic’ ни хобтя бы какого-нибудь списка. Как вам помогать? А вот хрен знает.

В-третьих, вы демонстрируете нам это
 buttons=()
for k in bot_menu:
	buttons.append(k["id"])
Где buttons - явно кортеж. Надеюсь, вы знаете, кто кортежи нельзя изменить? Какой может быть buttons.append?


Ну и в четвертых. Вот чтобы не гадать, что у вас там случилось на самом деле, может вы таки покажите нам весь код?
a.j.
Ошибка возникает здесь, цитирую лог:
File “….\telebot\types.py”, lines 702, in row
btn_array.append(button.to_dic())
Скобки конечно были какие надо.
Заменил генерацию массива на простейшую, ошибки те же:
 	buttons=[]
	for i in range(1,10):
		buttons.append(i)
	buttons=tuple(buttons)
	markup.row(buttons)
a.j.
Правильный ответ в преобразовании подписи кнопки к строке (были цифры):

 buttons=[]
for k in bot_menu:
	buttons.append(str(k["id"]))
markup.row(*buttons)

Т.е. *buttons - сработало, спасибо py.user.next
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB