【问题标题】:Kivy KeyError when using DictProperty使用 DictProperty 时出现 Kivy KeyError
【发布时间】:2020-02-09 20:14:16
【问题描述】:

我一直在尝试调试我的一个自定义小部件,但一直收到同样的错误:

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 来自哪里。

任何帮助表示赞赏,在此先感谢...

【问题讨论】:

    标签: python kivy


    【解决方案1】:

    问题在于,在解析 .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", "")
    

    【讨论】:

      猜你喜欢
      • 2019-01-10
      • 1970-01-01
      • 2021-02-18
      • 2013-05-05
      • 1970-01-01
      • 2018-05-02
      • 2020-03-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多