我一直在尝试调试我的自定义小部件之一,但不断出现相同的错误:
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来自何处。
感谢您的帮助,在此先感谢...
答案 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", "")