Python找不到kv文件

时间:2016-05-30 02:37:22

标签: python kivy

我尝试了很多不同的解决方案,但在我的程序启动时总是会出现一个空的黑屏,这是我的Python代码:

from kivy.app import App
from kivy.uix.label import Label


class AwesomeApp(App):
    def build(self):
        return Label()

if __name__ == "__main__":
    AwesomeApp().run()

input("press Enter to exit")

我做了一个非常基本的应用程序,因为我想尝试使用外部kv文件,这是我的kv代码,保存为“awesome.kv”,带有“所有文件类型”:

#:kivy 1.9.1

<Label>
    text: 'Hello World!'

当我启动python文件时,这总是会给我一个黑屏,即使我希望它有“Hello World!”写入。

请帮助!

2 个答案:

答案 0 :(得分:2)

您可以使用Builder类加载具有特定文件名的kv文件 以下是示例用法:

from kivy.lang import Builder
Builder.load_file("awesome.kv")

Builder也可以从字符串加载kv指令,允许您使用方法load_string将您的kv放在Python代码中而不是单独的文件中:

from kivy.lang import Builder
Builder.load_string("""
<Label>:
    text: 'Hello World!'
""")

您可以将窗口小部件作为这些方法的返回值

view = Builder.load_file("awesome.kv")

如果你的kv文件返回一些小部件(看起来像这样)

Label:
    text: 'Hello World!'

变量view将包含Label小部件,文本为"Hello World!"

此外,对我来说(使用Kivy v1.9.2-dev0)只要您的应用类被称为AwesomeAwesomeApp

,您的应用就会识别kv文件

答案 1 :(得分:1)

由于this,请不要将小部件的名称用作您自己的规则。您尝试覆盖它,它可能会有意想不到的结果。另外,正如Leva7在他的回答+自Kivy 1.really.old中所说的那样,一个名为继承自App的类的.kv文件被自动加载,你可以在控制台中看到它。额外的&#34; App&#34;剥离,例如剥离MyApp(App)将查找my.kv

此外,如果您使用python main.py -m inspectorCtrl+E运行它,那么您可以选择任何可用的小部件,并且您将看到您的标签存在。问题是你试图覆盖默认样式,它可能被忽略了。像这样定制Label

from kivy.app import App
from kivy.uix.label import Label

class MyLabel(Label): pass    
class AwesomeApp(App):
    def build(self):
        return MyLabel()

if __name__ == "__main__":
    AwesomeApp().run()

并在awesome.kv

<MyLabel>:
    text: 'Hello World'

示例:

from kivy.app import App
from kivy.uix.label import Label


from kivy.lang import Builder

Builder.load_string('''
<MyLabel>:
    text: 'Hello World'
''')

class MyLabel(Label): pass    
class AwesomeApp(App):
    def build(self):
        return MyLabel()

if __name__ == "__main__":
    AwesomeApp().run()