2017-02-11 16 views
2

によって削除ウィジェット私は次のコードを持っている:Kivy - 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ファイルで宣言されているウィジェットを削除するにはどうしたらいいですか? (私はボタンのon_pressself.parent.remove_widget(self)とを置き換えることができます知っているが、私はウィジェットを削除する以外にroot.remove()のコードを持っている。)

答えて

3

あなたのボタンの親は実際に内部BoxLayoutであるときは、remove_widgetGUIのオブジェクトを呼び出しています。 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()