2015-09-27 76 views
0

python 3.4.3 kivy 1.9.0kivy得到id的孩子

我想通过ID检索儿童图片列表。 这是去除或从该列表中

千伏设置与此相似的clear_widgets所有图片:

<Gui>: 
    grid: grid_1 
    BoxLayout: 
     Orientation: 'horizontal' 
     Button: 
      on_press: app.do_something() 
     GridLayout: 
      id: grid_1 
      cols: 4 

的PY文件就像这样:

class GuiApp(App): 
    list = ['test','test2',...] 

    def build(self): 
     G = Gui() 
     for i in list: 
      G.grid.add_widget(Image(source=i)) 

    def do_something(self): 
     G = Gui() 
     G.grid.clear_widgets([i for i in G.grid.children if type(i) is Image]) 

class Gui(BoxLayout): 
    grid = ObjectProperty(None) 

什么是应该发生的是网格布局应该清除所有更早通过for循环添加到窗口小部件的图像,当我运行这个时,没有任何消散,所有的图像保持不变,并且我在CMD窗口中得到一个错误,说[WARNING] <kivy.uix.gridlayout.GridLayout object at 0x00000000080B90A8> have no cols or rows set, layout is not triggered.

回答

0

您的代码的第一个问题是您的build方法创建一个Gui对象,但从不返回它。您应该在方法的末尾添加return G

然后,在do_something方法中,您正在通过再次执行G = Gui()来创建新的Gui对象。要访问您在build方法中创建的同一个G对象,您应该将其创建为self.G

下面是它应该是什么样子:

class GuiApp(App): 
    list = ['test','test2',...] 

    def build(self): 
     self.G = Gui() 
     for i in list: 
      self.G.grid.add_widget(Image(source=i)) 
     return self.G 

    def do_something(self): 
     self.G.grid.clear_widgets([i for i in self.G.grid.children if type(i) is Image]) 

class Gui(BoxLayout): 
    grid = ObjectProperty(None)