Kivy: load_string () vs kv file - PullRequest
       1

Kivy: load_string () vs kv file

0 голосов
/ 17 октября 2018

Чтобы понять логику Kivy kv language , я пытаюсь переписать минимальное приложение, заменив автоматическую загрузку файла kv вызовом Builder.load_string ().


Вот моя отправная точка ( источник: примеры 1-2, 1-3 ): два файла, weather.py и weather.kv :

weather.py:

from kivy.app import App
class WeatherApp(App):
    pass
if __name__ == '__main__':
        WeatherApp().run()

и weather.kv :

Label:
    text: "Hello World"

До этого все в порядке

result here.

Но если я пытаюсь вручную загрузить материал kv, я просто получаю черный экран (и без сообщения об ошибке).Мой код:

from kivy.app import App
from kivy.lang import Builder

KV = '''
Label
    text: "Hello World"
'''
Builder.load_string(KV)

class WeatherApp(App):
    pass

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

Я явно что-то здесь упускаю, но что?Любая помощь будет оценена!

1 Ответ

0 голосов
/ 17 октября 2018

Когда вы создаете .kv, существуют базовые, но строгие правила, среди которых может быть только один верхний уровень, верхний уровень идентифицируется, потому что у него нет «<>», кроме того, чтобы приложение распознало его, оно должно иметьТо же имя приложения в нижнем регистре, в вашем случае .kv называется weather .kv и Weather App app.Но вышеизложенного не произойдет, если вы используете Builder, в случае, если у .kv есть рут, как в вашем случае Builder.load_string() возвращает его, поэтому вы должны вернуть его в методе сборки приложения:

from kivy.app import App
from kivy.lang import Builder

KV = '''
Label:
    text: "Hello World"
'''
root = Builder.load_string(KV)

class WeatherApp(App):
    def build(self):
        return root

if __name__ == '__main__':
        WeatherApp().run()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...