ошибка ключа kivy при удалении виджета по идентификатору

#python #kivy

#python #kivy

Вопрос:

Я добавил виджет с помощью:

 current_mouth = Image(
        source=character.current_mouth,
        pos_hint=character.mouth_pos,
        size_hint_y= None,
        height= 500,
        id='mouth_' str(character.id)
    )
    print('mouth_' str(character.id))
    self.ids.float.add_widget(current_mouth)
  

Затем я пытаюсь его удалить:

 self.ids.float.remove_widget(self.ids['mouth_' str(character.id)])
  

Но это выдает ошибку ключа. Что я здесь сделал не так? Спасибо

Ответ №1:

ids Словарь создается при kv загрузке файла / строки. Вы не можете назначить id (по крайней мере, не тот, который появится в ids ) в python. Таким образом, ничего добавленного с помощью add_widget() , не появится в ids .

Из документации:

При обработке файла kv слабые ссылки на все виджеты, помеченные идентификаторами, добавляются в словарь идентификаторов корневого виджета.

Вы можете просто использовать ссылку на этот виджет, когда захотите его удалить. Не видя больше вашего кода, я не могу быть уверен, что это будет. Но что-то вроде:

 self.ids.float.remove_widget(current_mouth)
  

Комментарии:

1. понятно, спасибо. итак, есть ли способ удалить виджет, добавленный add_widget()?

2. спасибо, но они находятся в двух отдельных методах, поэтому я не могу использовать current_mouth при его удалении. Есть ли лучший способ, кроме как сделать current_mouth глобальным, чтобы я мог снова ссылаться на него?

3. Используйте self.current_mouth = при его создании, затем удалите его с помощью: self.ids.float.remove_widget(self.current_mouth)