2016-10-04 105 views
0

我想在RootWidgetremove孩子小孩下面的例子中,但点击RootButton删除两个孩子小部件(红色和绿色的)。但是在shell中打印的self.children列表中仍有第二个孩子,但不在RootWidget上查看。这里做错了什么?Kivy remove_widget从屏幕中删除所有的孩子小部件

from kivy.app import App 
from kivy.uix.button import Button 
from kivy.uix.boxlayout import BoxLayout 

RED = (1, 0, 0, 1) 
GREEN = (0, 1, 0, 1) 

class RootWidget(Button): 

    def __init__(self, *args, **kwargs): 
     super(RootWidget, self).__init__(*args, **kwargs) 
     self.add_widget(Button(background_color = RED), 0) 
     self.add_widget(Button(background_color = GREEN), 1) 
     self.bind(on_press = self.btn_call_back) 

    def btn_call_back(self, v): 
     try: 
      print "_" * 60 
      print self.children 
      print "+" * 60 
      self.remove_widget(self.children[0]) 
      print self.children 
      print "_" * 60 
     except IndexError: 
      print "no children any more!" 




class TutorApp(App): 

    def build(self): 
     return RootWidget() 


if __name__ == "__main__": 
    TutorApp().run() 

回答

1

不确定这种行为的确切原因是什么。也许当你按下你的按钮,它将从background_normal的背景替换为background_down,这在某种程度上覆盖了它的子节点的背景。这并不重要,因为您并不是真的要将小部件添加到Button实例。使用Widget或某些布局类来安排您的小部件。

from kivy.app import App 
from kivy.uix.button import Button 
from kivy.uix.widget import Widget 
from kivy.uix.boxlayout import BoxLayout 
from kivy.lang import Builder 

Builder.load_string(''' 
<Widget>: 
    canvas.before: 
     Color: 
      rgb: 0, 0, 1 
     Rectangle: 
      size: self.size 
      pos: self.pos 
''') 

RED = (1, 0, 0, 1) 
GREEN = (0, 1, 0, 1) 

class RootWidget(Widget): 

    def __init__(self, *args, **kwargs): 
     super(RootWidget, self).__init__(*args, **kwargs) 
     self.add_widget(Button(background_color = RED), 0) 
     self.add_widget(Button(background_color = GREEN), 1) 
     self.bind(on_touch_down = self.btn_call_back) 


    def btn_call_back(self, *args): 
     try: 
      print "_" * 60 
      print self.children 
      print "+" * 60 
      self.remove_widget(self.children[0]) 
      print self.children 
      print "_" * 60 
     except IndexError: 
      print "no children any more!" 


class TutorApp(App): 
    def build(self): 
     return RootWidget() 


if __name__ == "__main__": 
    TutorApp().run()