使用DictProperty时出现Kivy KeyError

时间:2020-02-09 07:21:30

标签: python kivy

我一直在尝试调试我的自定义小部件之一,但不断出现相同的错误:

KeyError: 'page_text'

以下是我为此测试应用创建的文件,该文件重新创建了此错误:

Python文件:

import kivy
from kivy.properties import StringProperty, DictProperty
from kivy.uix.label import Label
from kivy.app import App
from kivy.lang import Builder
Builder.load_file('test.kv')


class MultC(Label):

    chapter = StringProperty()
    page = StringProperty()
    data = DictProperty()

    def __init__(self, **kwargs):
        super(MultC, self).__init__(**kwargs)
        print(self.chapter)
        print(self.page)
        self.data = {"chapter_text": self.chapter, "page_text": self.page}
        print(self.data)


class MainApp(App):
    def build(self):
        return MultC()


MainApp().run()

我的kv:

<MultC>:
    chapter: "test"
    page: "test2"
    BoxLayout:
        orientation: 'vertical'
        Label:
            text: root.data["chapter_text"]

        Label:
            text: root.data["page_text"]

如果我定义data并为其提供有效的字典,我不知道它们的KeyError来自何处。

感谢您的帮助,在此先感谢...

1 个答案:

答案 0 :(得分:0)

问题在于,在解析.kv时,即使字典是空的,也无法生成错误。一种可能的解决方案是使用get()方法,但这不会实现绑定,但是基于this discussion的正确语法如下:

<MultC>:
    chapter: "test"
    page: "test2"
    BoxLayout:
        orientation: 'vertical'
        Label:
            text: (root.data).get("chapter_text", "")
        Label:
            text: (root.data).get("page_text", "")