Удалить виджет (объект) kivy из макета kivy (.kv) - PullRequest
0 голосов
/ 24 апреля 2020

Хорошо, поэтому я прочитал Kivy - Удаление виджета с идентификатором , что почти то, что я пытаюсь сделать, но ответ был помечен как правильный и не работает. Я пытался - много раз.

То, что я хочу сделать, - это возможность удалять каждый виджет, когда пользователь нажимает кнопку «Отписаться». У меня проблема с self.ids.widget_list.remove_widget(userRowObj). Оператор печати выдает:

emmachamberlain <screens.UserRow object at 0x13139F80> got back Removed: <screens.UserRow object at 0x13139F80>

Это правильно. Он печатает имя пользователя, затем объект UserRow, затем печатное сообщение, идентифицирующее его возвращение в класс PurgeScreen, затем сообщение, подтверждающее удаление объекта UserRow, но фактически оно никогда не удаляется из пользовательского интерфейса. Важно отметить, что строки создаются из py-файла, но список (с идентификатором widget_list) создается в .kv. Еще один интересный факт заключается в том, что «remove_widget» не появляется во время набора текста, а «clear_widgets» появляется, и когда я тестировал его, он удалял все строки из списка в пользовательском интерфейсе, предполагая, что он работает. Пожалуйста помоги!!! Из моего screens.py :

class UserRow(GridLayout):
    def __init__(self, obj, profile, user_id, user_name):
        self.calling_obj = obj
        self.profile = profile
        self.user_id = user_id
        self.user_name = user_name

    def create_layout(self):
        layout = GridLayout(rows=1, row_force_default=True, row_default_height=60)
        layout.add_widget(ImageButton(source=self.profile))
        layout.add_widget(Label(text="@" + self.user_name, color=(0, 0, 0, 1), font_size=20))
        layout.add_widget(Label(text=str(self.user_id), color=(0, 0, 0, 0), font_size=20))
        bsplit = GridLayout(rows=1)
        unfollowButton = Button(background_normal='images/buttonbackgrounds/unfollow.png',
                                background_down='images/buttonbackgrounds/unfollow_select.png',
                                size_hint_x=None, width=100)
        unfollowButton.bind(on_release=self.unfollow)
        bsplit.add_widget(unfollowButton)
        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)))
        layout.add_widget(bsplit)
        return layout

    def unfollow(self, *args):
        print(self.user_name)
        print(self)
        rt = self.calling_obj
        rt.remove_row(self)




class PurgeScreen(Screen):
    def backButton(self):
        SCREEN_MANAGER.current = 'dashboard'

    def add_row(self, profile, user_id, user_name, percent):
        u = UserRow(self, profile, user_id, user_name)
        l = u.create_layout()
        self.ids.widget_list.add_widget(l)
        self.update_percent(percent)

    def remove_row(self, userRowObj):
        print("got back")
        self.ids.widget_list.remove_widget(userRowObj)
        print("Removed: " + str(userRowObj))
...