python - 基维 : load_string() vs kv file

标签 python kivy

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

<小时/>

这是我的起点( source: examples 1-2, 1-3 ):两个文件,weather.pyweather.kv :

天气.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()

我显然在这里遗漏了一些东西,但是什么?任何帮助将不胜感激!

最佳答案

当你创建一个.kv时,有基本但严格的规则,其中只能有一个顶级,顶级被识别是因为它没有“<>”,除了App要识别它之外,它还必须具有小写应用程序的名称相同,在您的情况下,.kv 称为 weather.kvWeather 应用程序应用程序。但是如果您使用 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/

相关文章:

python - 如何在使用 python 在提示符下发出命令后截取 stdout 的每一行

python - Kivy 应用程序可以在 Windows 7 上运行,但不能在 ubuntu 上运行

python - 如何在kivy中制作圆形进度条?

python - 改变 Kivy 弹出窗口的背景

android - 带有kivy的android上的后退按钮功能

python - 捕获数字列的新列中是否存在 NA

python - 等待用户输入或按定义的时间间隔运行的程序?

python - 多重处理似乎不起作用

python - 如何在状态栏区域放一个进度条(gauge)并锁定gui大小

python - 如何使用 python 在 kivy 中进行 colspan