python - Kivy - 通过 id 删除小部件

标签 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__ == '__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_widgetremove_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()

关于python - Kivy - 通过 id 删除小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42173477/

相关文章:

python - 如何在Kivy中使用KivyMD字体

python - Nginx,ec2 上的 django,弹性 ip 没有响应

python - 你如何将一个 Numpy 数组 (mxn) 展开成一个向量

c - GtkButton 仅显示文本但不显示图像

android - Android 用户的滑动指示

python - 在TextInput中单击鼠标时光标消失(不闪烁)-Python Kivy

python - Koch雪花渲染时间(以及如何使用turtle绘制雪花)

python - 超时无法使用 urllib2、socks5 代理和 socksipy

android - 如何在TextView上将数字设置为图像?

python - Kivy RecycleView、RecycleGridLayout、滚动标签问题