我是初学者python学习者/编码员。我无法删除我刚刚创建的小部件。我仍然可以创建新按钮。这实际上只是一点小考验。最终,我想拥有可在其中添加和删除按钮的scrollview。有一些添加/删除小部件代码段,但是我必须能够添加/删除到另一个布局。
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.button import Button
from kivy.uix.widget import Widget
KV = """
BoxLayout
id:aaa
Button
text: 'Add'
on_press: app.add_more()
Button:
text:'Remove'
on_press: app.remove()
BoxLayout:
id:abc
"""
class MyApp(App):
def build(self):
self.root = Builder.load_string(KV)
def add_more(self):
print('wass')
addbutton = self.root.ids.abc
addbutton.add_widget(Button(text='hello'))
def remove(self):
print('hello')
self.remove_widget(self.children[0])
MyApp().run()
如果单击“删除”按钮(MyApp对象没有属性“ remove_widget”),则会收到此错误消息
答案 0 :(得分:0)
由于您将布局加载为self.root = Builder.load_string(KV)
,因此可以使用self.root.remove_widget(self.root.children[0])
删除第一个孩子
答案 1 :(得分:0)
self.remove_widget(self.children[0])
AttributeError: 'MyApp' object has no attribute 'remove_widget'
由MyApp继承的App类没有方法remove_widget()
。只有一个 root部件,该部件通常具有子代,而子代可以拥有自己的子代。
在另一个布局中删除小部件
self.remove_widget(...)
替换为self.root.ids.abc.remove_widget(...)
self.children[0]
替换为self.root.ids.abc.children[0]
remove_widget()
之前,请检查布局中是否有子项def remove(self):
print('hello')
if len(self.root.ids.abc.children) > 0: # check for children
self.root.ids.abc.remove_widget(self.root.ids.abc.children[0]) # remove child FIFO
Kivy中的小部件是按树组织的。您的应用程序具有根目录 小部件,通常包含children个,其中children个 他们自己的。小部件的子代表示为children 属性,即Kivy ListProperty。
可以使用以下方法来操纵小部件树:
add_widget():将小部件添加为子级
remove_widget(): 从子级列表中删除小部件
clear_widgets():删除 小部件中的所有子项