kivy:keyError:(3385,)在widget.py中

时间:2016-09-08 11:54:38

标签: python kivy destructor keyerror

尝试执行以下代码时(kivy-designer编辑的版本,在MIT许可下):

def __init__(self, **kwargs):
    self._buttons = {}

    super(PlaygroundSizeView, self).__init__(**kwargs)

    for title, values in self.default_sizes:
        grid = StackLayout(orientation="lr-tb", size_hint=(1, None))

        def sort_sizes(item):
            return item[1][1] * item[1][0]

        values = sorted(values, key=sort_sizes, reverse=True)
        for name, size in values:
            btn = ToggleButton(text='', markup=True, size_hint=(0.25, 0.25))
            btntext = ('%s\n[color=777777][size=%d]%dx%d[/size][/color]' %
                       (name, btn.font_size * 0.8, size[0], size[1]))
            btn.text = btntext
            btn.bind(on_press=partial(self.set_size, size))
            grid.add_widget(btn)
            self._buttons[name] = btn

        item = AccordionItem(title=title)
        _sv = ScrollView(do_scroll_x=False)
        _sv.add_widget(grid)
        item.add_widget(_sv)
        self.accordion.add_widget(item)

    self.accordion.select(self.accordion.children[-1])

    self.update_buttons()

在程序停止之前,我连续跟踪错误7次,不同的数字:

  

在以下内容中忽略了异常:functools.partial(,3385)
  追溯(最近的呼叫最后):
    文件" E:\ Program(x86)\ Python \ Kivy虚拟环境\ lib \ site-packages \ kivy \ uix \ widget.py",第239行,在_widget_destructor中   KeyError:(3385,)

它仅在我编辑代码并在#1添加ScrollView后才出现。我认为可能是python试图垃圾收集ScrollView但是在某种程度上无法收集。

widget.py的Linue 239是以下函数的del行:

def _widget_destructor(uid, r):
    # Internal method called when a widget is deleted from memory. the only
    # thing we remember about it is its uid. Clear all the associated callbacks
    # created in kv language.
    del _widget_destructors[uid]
    Builder.unbind_widget(uid)

提前多多感谢!

1 个答案:

答案 0 :(得分:0)

#1行在add_widget中有拼写错误。 你确定add_widget返回父窗口小部件吗? 我建议你首先制作一个ScrollView,然后添加网格,然后将该项添加到手风琴中。