Python 3.x 按其id从python文件中删除小部件

Python 3.x 按其id从python文件中删除小部件,python-3.x,kivy,Python 3.x,Kivy,我想知道如何从python文件中按id删除小部件。为了准确理解我的意思,让我们来考虑这个代码: 白痴 .kv : 网格布局: 科尔斯:1 id:主网格 如何才能做到这一点?加载kv文件/字符串时会创建ids字典,而在python代码中创建对象(具有id属性)不会将该对象放入ids。因此,您不能通过其id删除此类对象。只需将对已添加小部件的引用传递给remove()方法,即可完成删除操作: class A: def create(self): layout = GridL

我想知道如何从python文件中按id删除小部件。为了准确理解我的意思,让我们来考虑这个代码:

白痴

.kv

:
网格布局:
科尔斯:1
id:主网格

如何才能做到这一点?

加载
kv
文件/字符串时会创建
ids
字典,而在python代码中创建对象(具有
id
属性)不会将该对象放入
ids
。因此,您不能通过其
id
删除此类对象。只需将对已添加小部件的引用传递给
remove()
方法,即可完成删除操作:

class A:
    def create(self):
        layout = GridLayout(cols=1)
        label = Label(text="some text ")
        button = Button(text="delete", on_press=partial(self.remove, layout))
        layout.add_widget(label)
        layout.add_widget(button)
        self.ids.main_grid.add_widget(layout)
    def remove(self, layout, button):
        self.ids.main_grid.remove_widget(layout)

如果我在一个循环中包含
create()
方法的内容会怎么样?当我这样做时,只有最后一个小部件被删除,但是我如何删除按钮所属的小部件呢?请参阅更新的答案。这仍然只删除最后一个小部件。当我按下第一个按钮时,我希望第一个布局被删除。有没有办法做到这一点?最后一次更新。
<A>:
    GridLayout:
        cols:1
        id: main_grid
class A:
    def create(self):
        layout = GridLayout(cols=1)
        label = Label(text="some text ")
        button = Button(text="delete", on_press=partial(self.remove, layout))
        layout.add_widget(label)
        layout.add_widget(button)
        self.ids.main_grid.add_widget(layout)
    def remove(self, layout, button):
        self.ids.main_grid.remove_widget(layout)