Задать вопрос
Zuher
@Zuher
Неформатное радио

Как создать элементы в цикле python?

Добрый день! Не могу разобраться

Реквестом получаю JSON
{"1":{"title":"\u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043a\u0430\u043d\u0430\u043b","stream":"http:\/\/neformatnoe.ru:8777\/live"},"2":{"title":"\u041a\u0430\u043d\u0430\u043b \u041b\u0438\u0440\u0438\u043a\u0430","stream":"http:\/\/neformatnoe.ru:8777\/lirika"},"3":{"title":"\u041a\u0430\u043d\u0430\u043b \u0425\u0438\u043f\u0425\u043e\u043f","stream":"http:\/\/neformatnoe.ru:8777\/hiphop"},"4":{"title":"\u041a\u0430\u043d\u0430\u043b \u041a\u043b\u0443\u0431\u043d\u044f\u043a","stream":"http:\/\/neformatnoe.ru:8777\/club"},"5":{"title":"\u041a\u0430\u043d\u0430\u043b \u0416\u0435\u0441\u0442\u044c","stream":"http:\/\/neformatnoe.ru:8777\/hard"}}


Далее циклом строю кнопки

list_str = response.json()
i=1
for val in list_str.values():
    button = customtkinter.CTkButton(window, text=f"{val['title']}", command=lambda:radio(val['stream']))
    button.grid(row=i, column=1, sticky="n", pady=10)
    label = customtkinter.CTkLabel(window, text=f"{val['stream']}")
    label.grid(row=i, column=2, sticky="n", pady=10)
    
    print(val['title']) #принтую чисто для себя для контроля
    i=i+1 #итерациями цикла пытался добавлять индекс к button_X

А дальше затыка - умом понимаю, что проблема в том что все объекты называются @button
Так как по нажатию любой кнопки в функцию передаётся значение последней кнопки из цикла
Почитал доки по python и так понимаю переменным нельзя задать имя из цикла, только прямым объявлением из кода

Понятно, что на пяти кнопках можно от руки прописать, но дальше планы тягать данные из БД и исходя из их значений строить окно интерфейса и дальнейшие взаимодействия.

Куда глядеть, помогите)))
  • Вопрос задан
  • 72 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
@dim5x
ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
command=lambda v=val: radio(v['stream'])
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы