Хорошо, поэтому я прочитал 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))