#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)