【问题标题】:Kivy - Removing widget by idKivy - 按 id 删除小部件
【发布时间】:2017-06-29 15:12:21
【问题描述】:

我有以下代码:

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) 替换按钮的on_press,但除了删除小部件之外,我在root.remove() 中有代码。)

【问题讨论】:

    标签: python user-interface kivy kivy-language


    【解决方案1】:

    当您的按钮的父级实际上是其中的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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-19
      相关资源
      最近更新 更多