Kivy:如何检查子部件是否存在
Kivy: How to check for the existence of a child widget
在我的 .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
?
好吧,您可以使用 id 或其他一些子检查来做到这一点,但最简单和最直接的方法是在您的 class 中设置一个布尔标志,该标志将更改为 True
添加小部件时,False
删除小部件时。否则,您也可以创建一个 kivy box_obj = ObjectProperty(None)
并执行 self.box_obj = box
然后检查 self.box_obj
是否不是 None.
每个小部件都有一个 子项 属性,因此您可能想使用它。
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)
在我的 .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
?
好吧,您可以使用 id 或其他一些子检查来做到这一点,但最简单和最直接的方法是在您的 class 中设置一个布尔标志,该标志将更改为 True
添加小部件时,False
删除小部件时。否则,您也可以创建一个 kivy box_obj = ObjectProperty(None)
并执行 self.box_obj = box
然后检查 self.box_obj
是否不是 None.
每个小部件都有一个 子项 属性,因此您可能想使用它。
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)