繁体   English   中英

Kivy-按ID删除小部件

[英]Kivy - Removing widget by id

我有以下代码:

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

单击时应删除该按钮。 但是,这不会发生。 如果我在kv文件中删除BoxLayout ,则该程序将按预期工作,并且该按钮也将被删除。 为什么会发生这种情况,以及如何删除kv文件中声明的小部件? (我知道我可以用self.parent.remove_widget(self)替换Button的on_press ,但是除了删除小部件,我在root.remove()也有代码。)

当按钮的父对象实际上位于其中的BoxLayout时,您正在调用GUI对象的remove_widget remove_widget仅删除直接子级,而不删除任何后代。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM