Python Kivy:load_string()vs kv文件

Python Kivy:load_string()vs kv文件,python,kivy,Python,Kivy,为了理解背后的逻辑,我试图通过调用Builder.load_string()替换kv文件的自动加载来重写一个最小的应用程序 这是我的出发点():两个文件weather.py和weather.kv: weather.py: 和天气。千伏: 到那为止,一切都很好 但是如果我尝试手动加载kv东西,我只会得到一个黑屏(并且没有错误消息)。我的代码: from kivy.app import App from kivy.lang import Builder KV = ''' Label t

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


这是我的出发点():两个文件weather.py和weather.kv:

weather.py:

和天气。千伏:

到那为止,一切都很好

但是如果我尝试手动加载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()

很明显我遗漏了什么,但是什么?任何帮助都将不胜感激

创建.kv时有一些基本但严格的规则,其中只能有一个toplevel,toplevel被标识是因为它没有“”,除了应用程序要识别它,它必须具有与应用程序相同的小写名称,在您的情况下,.kv被称为weather.kv,而weather则被称为App。但是,如果您使用Builder,则不会发生上述情况,因为.kv有一个根,就像您的案例中一样
Builder.load\u string()
会返回它,因此您必须在应用程序的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()

创建.kv时有一些基本但严格的规则,其中只能有一个toplevel,toplevel被标识,因为它没有“”,除了应用程序要识别它,它必须具有与应用程序相同的小写名称,在您的情况下,.kv被称为weather.kv,而weather则被称为App。但是,如果您使用Builder,则不会发生上述情况,因为.kv有一个根,就像您的案例中一样
Builder.load\u string()
会返回它,因此您必须在应用程序的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()
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()