Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 1, 2017 20:16:40

a.j.
Зарегистрирован: 2017-06-01
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Какой формат аргументов у markup.row (Telegram API)

Всем.

В статическом варианте, по советам авторов статей в инете, для компоновки набора кнопок в окне ввода аргументы в 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

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

Как передать динамически перечень кнопок? Может, какой-то “ну совсем другой” формат требуется?

Отредактировано a.j. (Июнь 1, 2017 20:17:46)

Офлайн

#2 Июнь 2, 2017 01:08:40

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10015
Репутация: +  857  -
Профиль   Отправить e-mail  

Какой формат аргументов у markup.row (Telegram API)

  
tup = ('1','2','3')
 
markup.row(*tup)



Отредактировано py.user.next (Июнь 2, 2017 01:08:45)

Офлайн

#3 Июнь 2, 2017 10:54:30

a.j.
Зарегистрирован: 2017-06-01
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Какой формат аргументов у markup.row (Telegram API)

Во-первых, я собираю массив с помощью append. Преобразую через tuple().
Аргумент вида *buttons дал ошибку ту же, только с другим типом: ‘int’ object has no attribute ‘to_dic’

Офлайн

#4 Июнь 2, 2017 11:17:17

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Какой формат аргументов у markup.row (Telegram API)

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?


Ну и в четвертых. Вот чтобы не гадать, что у вас там случилось на самом деле, может вы таки покажите нам весь код?



Офлайн

#5 Июнь 2, 2017 18:25:01

a.j.
Зарегистрирован: 2017-06-01
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Какой формат аргументов у markup.row (Telegram API)

Ошибка возникает здесь, цитирую лог:

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)

Офлайн

#6 Июнь 5, 2017 20:06:50

a.j.
Зарегистрирован: 2017-06-01
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Какой формат аргументов у markup.row (Telegram API)

Правильный ответ в преобразовании подписи кнопки к строке (были цифры):

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

Т.е. *buttons - сработало, спасибо py.user.next

Отредактировано a.j. (Июнь 5, 2017 20:07:31)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version