Доступ к объектам с одинаковым идентификатором

#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