Python фреймворк Kivy не видит файл с расширением .kv

Проблема такова. Определяю родительский и дочерний классы в файле main.py. Также определяю дочерний класс в файле my.kv, добавляя к нему 2 виджета (Label и Button).

main.py

from kivy.app import App 
from kivy.uix.boxlayout import BoxLayout 
from kivy.properties import ObjectProperty 

class MyApp(App):
    pass

class Child(BoxLayout):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)

class Parent(BoxLayout):

    obj = ObjectProperty(Child())

    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.add_widget(self.obj)




if __name__ == '__main__':
    MyApp().run()

my.kv

Parent:

<Child>:
    Label:
        text: "Some text"
    Button:
        text: "Button"

Определяю дочерний класс как свойство для родительского класса и при инициализации добавляю его в родительский. Но при запуске я не вижу ранее добавленных виджетов (Label и Button), на экране просто пустой виджет. Как будто файл my.kv просто игнорируется. Объясните, пожалуйста, в чем проблема.


Ответы (1 шт):

Автор решения: insolor

В классе приложения нужно реализовать метод build, откуда нужно вернуть объект класса Child (в вашем случае):

from kivy.app import App 
from kivy.uix.boxlayout import BoxLayout 
from kivy.properties import ObjectProperty 


class MyApp(App):
    def build(self):
        return Child()


class Child(BoxLayout):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)


class Parent(BoxLayout):

    obj = ObjectProperty(Child())

    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.add_widget(self.obj)


if __name__ == '__main__':
    MyApp().run()

Скриншот

→ Ссылка