Kivy - 按 id 删除小部件
Posted
技术标签:
【中文标题】Kivy - 按 id 删除小部件【英文标题】:Kivy - Removing widget by id 【发布时间】:2017-06-29 15:12:21 【问题描述】:我有以下代码:
from kivy.app import App
from kivy.uix.floatlayout import FloatLayout
class GUI(FloatLayout):
def remove(self):
self.remove_widget(self.ids.test)
class GUIApp(App):
def build(self):
return GUI()
if __name__ == '__main__':
GUIApp().run()
以及对应的kv
文件:
#:kivy 1.9.1
<GUI>:
BoxLayout:
Button:
id: test
text: 'Test'
on_press: root.remove()
单击时应删除该按钮。但是,这不会发生。如果我删除 kv 文件中的BoxLayout
,程序按预期工作,并且按钮被删除。为什么会发生这种情况,如何删除在 kv 文件中声明的小部件? (我知道我可以用self.parent.remove_widget(self)
替换按钮的on_press
,但除了删除小部件之外,我在root.remove()
中有代码。)
【问题讨论】:
【参考方案1】:当您的按钮的父级实际上是其中的BoxLayout
时,您正在调用GUI
对象的remove_widget
。 remove_widget
只删除直接子代,不删除任何后代。
from kivy.app import App
from kivy.uix.floatlayout import FloatLayout
from kivy.lang import Builder
Builder.load_string('''
<GUI>:
BoxLayout:
id: layout
Button:
id: test
text: 'Test'
on_press: root.remove()
''')
class GUI(FloatLayout):
def remove(self):
self.ids.layout.remove_widget(self.ids.test)
class GUIApp(App):
def build(self):
return GUI()
if __name__ == '__main__':
GUIApp().run()
【讨论】:
以上是关于Kivy - 按 id 删除小部件的主要内容,如果未能解决你的问题,请参考以下文章