2014-10-16 3 views
1

У меня есть BoxLayout, определенный в файле kivy, и я пытаюсь добавить метку к этому BoxLayout из файла python. Ниже приведены мои сценарии python и kivy. Когда я пытаюсь запустить программу, как есть, это не удается, и я получаю сообщение об ошибке:Как добавить дополнительный виджет из файла python в супер-виджет, определенный в файле kivy?

«properties.pyx», строка 654, в kivy.properties.ObservableDict .__ getattr__ (kivy \ properties.c: 9590) KeyError: 'коробка'

Как я могу добавить метку (определенный в 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

Если те действительно ваши имена файлов, файл киловольт никогда не загружен, поэтому BoxLayout с идентификатором " box "не существует. Переименуйте файл kv в test.kv или используйте kivy.lang.Builder.load_file('dummy.kv').

+0

Спасибо. Я добавил оператор импорта «из kivy.lang import Builder» и «Builder.load_file (« dummy.kv »)», как это видно в отредактированном блоке кода выше. Тем не менее, я все еще получаю ту же ошибку. Пожалуйста, порекомендуйте. – phazon

+0

Является ли отступ в вашем вставленном коде тем же самым, что и отступ в реальном файле? – inclement

+0

К сожалению. Теперь это. Я только что отступил строку, содержащую «box: box» в файле kivy, чтобы исправить ее. Теперь он имеет точно такой же отпечаток, как и мой фактический код. – phazon

0

Вы не инициализировать 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() 
Смежные вопросы