#python #kivy
Вопрос:
Ради воспроизводимости я многократно использую объект, а не создаю новый,
Я добавляю заводской объект в основной макет и с помощью кнопки удалить могу удалить добавленный объект,
Но если я добавлю 2 или более объектов в макет, функция удаления будет работать только для последнего добавленного объекта
Итак, существует ли какой-либо механизм, который может генерировать уникальный идентификатор для объекта, который затем можно использовать для его удаления
Код
from kivymd.app import MDApp from kivy.lang import Builder from kivy.factory import Factory kv=''' lt;Image_1@BoxLayoutgt;: orientation:'vertical' id:img_1 Image: source:"/storage/emulated/0/Download/download (37).jpeg" Button: text:"remove" on_press:app.remove() BoxLayout: orientation:'vertical' GridLayout: cols:1 id:sc_grid Button: size_hint:None,None text:"add" on_press: app.add_1() ''' class MyApp(MDApp): def build(self): return Builder.load_string(kv) def add_1(self): self.Image_1=Factory.Image_1() self.root.ids.sc_grid.add_widget(self.Image_1) def remove(self): self.root.ids.sc_grid.remove_widget(self.Image_1) MyApp().run()
Ответ №1:
Не знаю, что в итоге будет делать ваше приложение, но вы могли бы сделать это без идентификатора.
Путем добавления обработчика удаления к Image
объекту и доступа к нему с self.parent.remove
помощью . Кроме того, вы можете отслеживать свои объекты в списке, чтобы добавлять/удалять элементы.
Для создания UUID вы можете использовать uuid.uuid4()
метод Pythons, но я думаю, что это необязательно.
Пожалуйста, взгляните на приведенный ниже код, который позволяет добавлять и удалять элементы.
from kivymd.app import MDApp from kivy.lang import Builder from kivy.factory import Factory import uuid kv=''' lt;Image_1@BoxLayoutgt;: orientation:'vertical' #id:img_1 Image: source:"/storage/emulated/0/Download/download (37).jpeg" Button: text:"remove" on_press: self.parent.remove() BoxLayout: orientation:'vertical' GridLayout: cols:1 id:sc_grid Button: size_hint:None,None text:"add" on_press: app.add() ''' class MyApp(MDApp): def build(self): return Builder.load_string(kv) def add(self): Image=Factory.Image_1() # Image.id = uuid.uuid4() Image.remove = lambda: self.root.ids.sc_grid.remove_widget(Image) self.root.ids.sc_grid.add_widget(Image) MyApp().run()
Комментарии:
1. Круто ! , мне лучше использовать обработчик удаления, предоставленный объекту изображения, а не использовать uuid