我在kivy文件中定义了一个BoxLayout,我正在尝试从python文件向此BoxLayout添加标签。下面是我的python和kivy脚本。当我尝试按原样运行程序时,它失败了,我收到一条错误消息:
“properties.pyx”,第654行,位于kivy.properties.ObservableDict .__ getattr __(kivy \ properties.c:9590) KeyError:'box'
如何从dummy.py向BoxLayout(在dummy.kv中定义)添加标签(在dummy.py中定义)?
dummy.py如下所示:
from kivy.app import App
from kivy.properties import ObjectProperty
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.label import Label
from kivy.lang import Builder
Builder.load_file('dummy.kv')
class test(BoxLayout):
box = ObjectProperty()
def __init__(self):
label = Label(text='Hello')
self.ids.box.add_widget(label)
class Test(App):
def build(self):
return test()
if __name__ == '__main__':
Test().run()
dummy.kv如下所示:
#:kivy 1.8
<test>:
box: box
BoxLayout:
orientation: 'vertical'
id: box
答案 0 :(得分:1)
您没有正确初始化test
课程:
from kivy.app import App
from kivy.properties import ObjectProperty
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.label import Label
from kivy.lang import Builder
Builder.load_file('dummy.kv')
class test(BoxLayout):
box = ObjectProperty()
def __init__(self):
label = Label(text='Hello')
super(test,self).__init__() #-------ADD THIS LINE
print(self.ids)
self.ids.box.add_widget(label)
class Test(App):
def build(self):
return test()
if __name__ == '__main__':
Test().run()
答案 1 :(得分:0)
如果这些文件名实际上是你的文件名,则永远不会加载kv文件,因此不存在id为“box”的BoxLayout。将kv文件重命名为test.kv
或使用kivy.lang.Builder.load_file('dummy.kv')
。