如何将一个子窗口小部件从python文件添加到一个kivy文件中定义的超级窗口小部件?

时间:2014-10-16 22:42:38

标签: python-2.7 kivy

我在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

2 个答案:

答案 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')