KIVY:如何清除所有孩子的网格布局

时间:2017-10-30 15:06:25

标签: android python python-3.x kivy kivy-language

我正在尝试删除按下按钮时动态创建的网格布局中的所有按钮。香港专业教育学院尝试使用clear_widget(),但这不起作用。现在我将id分配给那些动态创建的按钮并尝试删除它们但它也无法正常工作

的Python

def drinksSelect(self,value):  # creating a button by referring the id of the layout in which to create button
    drinkImagePath = {'pepsi': 'drinksPictures/pepsi.png','7up': 'drinksPictures/7up.png'}
    if self.root.a_s.l < self.root.a_s.limit: # You know what I mean
        st = 'number'
        img = myImage(source= drinkImagePath[value], size=(200,20), id=st)
        self.root.a_s.ids['place_remaining'].add_widget(img)
        self.root.a_s.l += 1

def checkout(self): #when this fucntion is called, it should clear the gridLayout with id drinksLayout
    #self.root.a_s.ids.drinksLayout.clear_widget(self.root.a_s.ids.place_remaining)
    st = 'number'
    self.root.a_s.ids.place_remaining.remove_widget(self.root.a_s.ids.st)

KV

 GridLayout:
        id: drinksLayout
        size_hint_y: 0.3
        orientation: 'horizontal'
        rows: 1
        GridLayout:
            id: place_remaining
            rows: 1
            size_hint_x: 80
        Button:
            id: label1
            width: 200 
            size_hint: None,0.4
            background_normal:'1.jpg'
            text: 'Checkout'
            on_release: app.checkout()

2 个答案:

答案 0 :(得分:1)

您只需编辑checkout方法即可

    def checkout(self):  # when this fucntion is called, it should clear the gridLayout with id drinksLayout
        self.root.a_s.ids.place_remaining.clear_widgets()
        #but don't forget
        self.root.a_s.l = 0

答案 1 :(得分:0)

要清除其所有子节点的GridLayout,请参阅示例以获取详细信息。

实施例

main.py

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.properties import ObjectProperty
from kivy.uix.image import Image


class RemoveWidgetDemo(BoxLayout):
    place_remaining = ObjectProperty(None)

    def __init__(self, **kwargs):
        super(RemoveWidgetDemo, self).__init__(**kwargs)
        self.drinksSelect()

    def drinksSelect(self):
        drinkImagePath = {'pepsi': 'drinksPictures/pepsi_logo.png', '7up': 'drinksPictures/7up-logo.png'}
        for value in drinkImagePath.values():
            self.place_remaining.add_widget(Image(source=value, size=(200, 20)))

    def checkout(self):
        for child in [child for child in self.place_remaining.children]:
            self.place_remaining.remove_widget(child)


class TestApp(App):
    title = "Kivy Clear GridLayout of all its children"

    def build(self):
        return RemoveWidgetDemo()


if __name__ == '__main__':
    TestApp().run()

test.kv

#:kivy 1.10.0

<RemoveWidgetDemo>:
    place_remaining: place_remaining

    GridLayout:
        id: drinksLayout
        size_hint_y: 0.3
        orientation: 'horizontal'
        rows: 1

        GridLayout:
            id: place_remaining
            rows: 1
            size_hint_x: 80

        Button:
            id: label1
            width: 200
            size_hint: None,0.4
            background_normal:'1.png'
            text: 'Checkout'
            color: 0, 0, 0, 1
            on_release: root.checkout()

输出

enter image description here enter image description here