为了理解Kivy背后的逻辑kv language ,我正在尝试通过调用 Builder.load_string() 替换 kv 文件的自动加载来重写最小应用程序。
<小时/>这是我的起点( source: examples 1-2, 1-3 ):两个文件,weather.py 和 weather.kv :
天气.py:
from kivy.app import App
class WeatherApp(App):
pass
if __name__ == '__main__':
WeatherApp().run()
和weather.kv:
Label:
text: "Hello World"
到此为止,一切正常
.
但是如果我尝试手动加载 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时,有基本但严格的规则,其中只能有一个顶级,顶级被识别是因为它没有“<>”,除了App要识别它之外,它还必须具有小写应用程序的名称相同,在您的情况下,.kv 称为 weather.kv 和 Weather 应用程序应用程序。但是如果您使用 Builder,则不会发生上述情况,如果 .kv 有根,就像您的情况一样, Builder.load_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()
关于python - 基维 : load_string() vs kv file,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52858255/