Действия кнопок над динамически создаваемыми виджетами kivy - PullRequest
0 голосов
/ 23 апреля 2020

Я динамически создаю строки в функции add_row, которые добавляются в этот список просмотра прокрутки, и все это выглядит / работает очень хорошо. Проблема в том, что у строк есть кнопки, и я хочу, чтобы эти кнопки были связаны с событиями / действиями. Я попытался поместить on_release, но он выдает эту ошибку:

File "kivy\_event.pyx", line 419, in kivy._event.EventDispatcher.bind
 AssertionError: None is not callable

Я не знаю, как сделать это, чтобы я мог привязать кнопку к чему-то, сохраняя при этом структуру Dynami c. Пожалуйста помоги! Вот мой код:

def add_row(self, profile, user_id, user_name, percent):
    layout = GridLayout(rows=1, row_force_default=True, row_default_height=60)
    layout.add_widget(ImageButton(source=profile))
    layout.add_widget(Label(text="@" + user_name, color=(0, 0, 0, 1), font_size=20))
    layout.add_widget(Label(text=str(user_id), color=(0, 0, 0, 0), font_size=20))
    bsplit = GridLayout(rows=1)
    bsplit.add_widget(Button(background_normal='images/buttonbackgrounds/unfollow.png',
                             background_down='images/buttonbackgrounds/unfollow_select.png', size_hint_x=None, width=100, id=str(user_id), on_release=self.unfollow()))
    bsplit.add_widget(Button(background_normal='images/buttonbackgrounds/waitlist.png',
                             background_down='images/buttonbackgrounds/waitlist_select.png', size_hint_x=.5, border=(3,3,3,3), id=str(user_id)))
    layout.add_widget(bsplit)
    self.ids.widget_list.add_widget(layout)
    self.update_percent(percent)

def unfollow(self):
    print(self)

1 Ответ

0 голосов
/ 23 апреля 2020

Для этого можно использовать bind .

    button1 = Button(background_normal='images/buttonbackgrounds/unfollow.png',
                     background_down='images/buttonbackgrounds/unfollow_select.png',
                     size_hint_x=None, width=100, id=str(user_id))
    button1.bind(on_release=self.unfollow)
    bsplit.add_widget(button1)

Обратите внимание, что вы просто передаете объект метода в bind, а не выполняете его с помощью "()".

...