Kivy:如何检查子窗口小部件的存在

时间:2017-06-05 13:11:54

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

在我的.py文件中,我有一个类似于:

的屏幕
class ExampleScreen(Screen):
    def create_layout(self):
        box = BoxLayout(orientation='vertical')
        # other layout stuff in here
        self.add_widget(box)

在我的.kv文件中,我有一个按钮,当按下该按钮时,会调用此函数并在<ExampleScreen>上显示此布局。但是,我希望能够按下此按钮并首先检查此布局是否已存在,如果是,则在添加新布局之前删除。我期望将create_layout()修改为:

def create_layout(self):
    if (box layout child has already been added):
        self.remove_widget(box layout child)
    box = BoxLayout(orientation='vertical')
    # other layout stuff in here
    self.add_widget(box)

有谁知道怎么做?以某种方式使用id

2 个答案:

答案 0 :(得分:1)

每个小部件都有一个 children 属性,因此您可能想要使用它。

for c in list(self.children):
    if isinstance(c, BoxLayout): self.remove(c)

您也可以将其指定给小部件:(如Edvardas Dlugauskas anwser中所述)

def __init__(self, **kw):
    self.box = None
    ...


def create_layout(self):
    if self.box: self.remove(self.box) 
    self.box = BoxLayout(orientation='vertical')
    self.add_widget(box)

答案 1 :(得分:0)

嗯,你可以用id或其他一些子检查来做,但最简单和最直接的方法是在你的类中添加一个布尔标志,当你添加时,它会变为True移除窗口小部件和False。否则,您还可以创建kivy box_obj = ObjectProperty(None)并执行self.box_obj = box,然后检查self.box_obj是否为非。