У меня есть кнопка удаления, которая удаляет виджеты с другой страницы. Однако кнопка фактически не удаляет виджет. Кнопка также должна удалить объект json, который прикреплен к виджету, но он также этого не делает.
код:
# displays the streak that was clicked on in screen two
def display_streak(self, obj):
self.third_screen()
name = obj.id
bottle = self.root.get_screen("three")
can = self.root.get_screen('two')
bottle.ids.del_space.add_widget(Button(id=name, text="Delete", size=(60,25), size_hint=(None,None),
font_size=18, on_press=self.del_button)) # fix later
def del_button(self, obj):
bottle = self.root.get_screen("two")
can = self.root.get_screen('three')
name = obj.id
with open("streak.json", "r+") as f:
data = json.load(f)
for child in self.root.screen_two.ids.streak_zone.children:
if child.text == name:
print("delete")
bottle.screen_two.ids.streak_zone.remove_widget(child)
for i in xrange(len(data)):
if data[i] == name:
data.pop(i)
break
open("streak.json", "w").write(json.dump(data, sort_keys=True, indent=4))
Я пытался сравнить идентификатор кнопки в del_space
с текстом внутри виджетов в streak_zone
для удаления, но по какой-то причине это не работает. Я даже передал obj от on_press=self.del_button
, и он все еще не работает, почему?
EDIT
obj
в display_streak()
передается из условия, которое связывает функцию с виджетом кнопки:
elif delay > time.time() > self.honey: # on time (green)
child.background_normal = ''
child.background_color = [0, 1, 0, .95]
child.unbind(on_press=self.early_click)
child.bind(on_press=self.add_score)
child.bind(on_press=self.display_streak)
child.bind(on_press=self.draw_streak)
EDIT
Я не уверен, но я верю, что проблема может быть в моем коде kivy:
<ScreenTwo>
id: screen_two
name: "two"
on_leave: app.restart()
on_enter: app.display_btn()
ScrollView:
GridLayout:
cols: 2
rows: 1
ScrollView:
BoxLayout:
id: streak_zone
orientation: 'vertical'
height: self.minimum_height
При входе на страницу 2 display_btn
активируется
Python:
def display_btn(self):
...
for value in data.values():
if value['delta'] is not None:
print(f"action={value['action']}, delta={value['delta']}, grace={value['delay']}")
streak_button = StreakButton(id=(value['action']), text=value['action'],
color=(0,0,0,1), size=(400, 50),
size_hint=(None, None))
self.root.screen_two.ids.streak_zone.add_widget(streak_button)
...
Если по этой причине кнопка не будет удалена, то как мне обойти эту проблему?