Python Kivy-按id删除小部件

Python Kivy-按id删除小部件,python,user-interface,kivy,kivy-language,Python,User Interface,Kivy,Kivy Language,我有以下代码: from kivy.app import App from kivy.uix.floatlayout import FloatLayout class GUI(FloatLayout): def remove(self): self.remove_widget(self.ids.test) class GUIApp(App): def build(self): return GUI() if __name__ == '_

我有以下代码:

from kivy.app import App
from kivy.uix.floatlayout import FloatLayout


class GUI(FloatLayout):
    def remove(self):
        self.remove_widget(self.ids.test)


class GUIApp(App):
    def build(self):
        return GUI()


if __name__ == '__main__':
    GUIApp().run()
以及相应的
kv
文件:

#:kivy 1.9.1

<GUI>:
    BoxLayout:
        Button:
            id: test
            text: 'Test'
            on_press: root.remove()
#:kivy 1.9.1
:
盒子布局:
按钮:
id:测试
文本:“测试”
按:root.remove()

单击时应删除该按钮。然而,这并没有发生。如果我删除kv文件中的
BoxLayout
,程序将按预期工作,按钮将被删除。为什么会发生这种情况,如何删除kv文件中声明的小部件?(我知道我可以用
self.parent.remove\u widget(self)
替换按钮上的
,但是我在
root.remove()
中有代码,除了移除小部件之外。)

当你的按钮的父对象实际上是
BoxLayout
时,你正在调用
GUI
对象的
remove\u widget
remove_小部件
只删除一个直接子项,而不删除任何子项

from kivy.app import App
from kivy.uix.floatlayout import FloatLayout
from kivy.lang import Builder

Builder.load_string('''
<GUI>:
    BoxLayout:
        id: layout
        Button:
            id: test
            text: 'Test'
            on_press: root.remove()
''')


class GUI(FloatLayout):
    def remove(self):
        self.ids.layout.remove_widget(self.ids.test)


class GUIApp(App):
    def build(self):
        return GUI()


if __name__ == '__main__':
    GUIApp().run()
从kivy.app导入应用
从kivy.uix.floatlayout导入floatlayout
从kivy.lang导入生成器
Builder.load_字符串(“”)
:
盒子布局:
id:布局
按钮:
id:测试
文本:“测试”
按:root.remove()
''')
类GUI(浮动布局):
def移除(自):
self.ids.layout.remove_小部件(self.ids.test)
类GUI应用程序(应用程序):
def生成(自):
返回GUI()
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
GUIApp().run()