清除小部件 kivy

Posted

技术标签:

【中文标题】清除小部件 kivy【英文标题】:Clear widget kivy 【发布时间】:2015-03-19 12:38:04 【问题描述】:

我是kivy的新手。 我有一个按钮来刷新数据库中的列表项, 这是绑定到该按钮的函数:

def refresh_account(self):
    self.ids.grid.clear_widgets()
    for d in self.listdata:
        self.acc_grid.add_row(d, body_alignment, col_size)
    scroll = ScrollView(size_hint=(0.9, 0.9), size=(400, 50000), scroll_y=0, pos=(40, -30))
    scroll.clear_widgets()
    print "scroll children : ", scroll.children
    scroll.add_widget(self.acc_grid)
    scroll.do_scroll_y = True
    scroll.do_scroll_x = False
    self.ids.grid.add_widget(self.scroll)

我收到一个错误:

kivy.uix.widget.WidgetException: 无法在 0x7fd415756ce8",它已经有一个父级 "kivy.uix.scrollview.ScrollView 对象在 0x7fd413771b48"

有什么理由吗?我已通过scroll.clear_widgets() 删除了所有小部件,并且滚动子打印输出为“[]”?

【问题讨论】:

【参考方案1】:

错误不是滚动已经有子级,而是您尝试添加到其中的网格已经有父级。您没有提供足够的信息来实际调试问题,但很可能self.acc_grid 不是self.ids.grid 的子级,因此在调用clear_widgets 后仍然有父级。

scroll = ScrollView(size_hint=(0.9, 0.9), size=(400, 50000), scroll_y=0, pos=(40, -30))
scroll.clear_widgets()

另外,上面的 sn-p 什么也不做。您刚刚实例化了ScrollView,所以它自然没有子级。如果您不这么认为,也许这会导致您的错误。

(另外,使用clear_widgets 可能不是真的必要,您可以直接更新现有的小部件)。

【讨论】:

我在 kivy 中找不到任何关于更新小部件功能的信息,可能我必须手动进行吗?

以上是关于清除小部件 kivy的主要内容,如果未能解决你的问题,请参考以下文章

Kivy:获取小部件 ID 并通过唯一属性访问小部件

在子小部件中,如何在 kivy 中获取父小部件的实例

有没有一种简单的方法可以在没有图像的情况下为 Kivy 标签、按钮、小部件等添加边框?

Kivy 在布局末尾添加小部件

Kivy 如何访问子小部件中的小部件

Kivy 语言可以访问继承的布局和小部件吗?