Python Kivy. Как привязать id к динамически созданному виджету кнопки или передать его текстовое значение в on_press?

Динамически, на основании списка полученного из db, создаю в цикле ряд кнопок и привязываю к каждой событие:

def show_locations(self):

    def set_value(obj, value):
        obj.text = value
        self.grid.clear_widgets()

    obj = self.ids.ti_point_A


    locations = spr_locations().Select_all_ILIKE(obj.text)

    if not (locations == False):

        for index, value in enumerate(locations):

            id_=f'locations_id_{index}'

            self.grid.add_widget(Button(text=value
                                        , id = id_          ## <-- это не работает
                                        , font_size = '15sp'
                                        , halign = 'left'
                                        , valign = 'middle'
                                        , size_hint_y = None
                                        , height = 20
                                        , on_press = lambda x: set_value(obj, value) ## <-- передаёт неверное значение
                                        ))

Задача, чтобы при нажатии на одну из них соответствующее значение попадало в статически созданный текстовый блок obj.text = value .

Первая проблема, как оказалось, на момент нажатия на кнопку значение value уже равно значению последнего элемента списка, а мне нужно, чтобы каждой кнопке сопоставлялось своё.

Передача вместо значения его индекса в списке почему-то приводит к прямо противоположному результату достуно становится первое значение списка с индексом [0]

Попробовал присвоить id чтобы добраться через него -ругается: TypeError: object.init() takes exactly one argument (the instance to initialize) Закомментировал.

Попробовал - on_press = lambda x: set_value(obj, self.text) пишет - AttributeError: 'Movement' object has no attribute 'text'

Почему???

Я же его присвоил - Button( text = value)

Помогите разобраться !!!

0 ответов

Другие вопросы по тегам