【问题标题】:kivy: KeyError: (3385,) in widget.pykivy: KeyError: (3385,) in widget.py
【发布时间】:2017-01-16 08:16:06
【问题描述】:

尝试执行以下代码时(来自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)
回溯(最近一次通话最后一次):
_widget_destructor 中的文件“E:\Programme(x86)\Python\Kivy Virtual Environment\lib\site-packages\kivy\uix\widget.py”,第 239 行 关键错误:(3385,)

它仅在我编辑代码并在#1 处添加ScrollView 后出现。我认为这可能是 python 正在尝试垃圾收集 ScrollView 但不知何故无法。

widget.py 的第 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)

提前非常感谢!

【问题讨论】:

    标签: python kivy destructor keyerror


    【解决方案1】:

    第 1 行在 add_widget 中有错字。 您确定 add_widget 返回父小部件吗? 我建议你先做一个 ScrollView,然后添加网格,然后将项目添加到手风琴。

    【讨论】:

    • 这是一个合理的问题 - 我更正了我的代码,谢谢!遗憾的是,它不会改变结果。
    • 非常感谢您的努力,欢迎来到 Stackoverflow!只有一件事:这种内容(一个问题和一个尝试的建议)属于 cmets。
    • 作为新用户,我无法对开头的问题发表评论。我的 Kivy 也有点生疏了……但我记得在父对象中保留对子对象的显式引用以禁用 python 垃圾收集是一种很好的做法。
    猜你喜欢
    • 1970-01-01
    • 2015-09-13
    • 1970-01-01
    • 2021-11-10
    • 2022-11-18
    • 2022-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多