2017-02-11 48 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

你打電話remove_widgetGUI對象時,你的按鈕的父母實際上是BoxLayout裏面。 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()