尝试执行以下代码时(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)
提前多多感谢!
答案 0 :(得分:0)
#1行在add_widget中有拼写错误。 你确定add_widget返回父窗口小部件吗? 我建议你首先制作一个ScrollView,然后添加网格,然后将该项添加到手风琴中。