Kivy:load_string()与KV文件

时间:2018-10-17 15:15:49

标签: python kivy

为了理解Kivy kv language背后的逻辑,我试图通过调用Builder.load_string()替换kv文件的自动加载来重写最小的应用程序。 / p>


这是我的出发点(source: examples 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 :(得分:2)

创建.kv时,有一些基本但严格的规则,其中只能有一个顶层,因为它没有“ <>”,所以顶层被标识出来,除了让应用程序识别它还必须具有应用程序的名称相同(小写),在您的情况下,.kv称为 weather .kv ,而 Weather App 应用。但是,如果您使用Builder,则上述情况不会发生,如果.kv具有根目录,则Builder.load_string()将其返回,因此您必须在App的build方法中将其返回:

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()