Python找不到kv fi

2024-10-01 15:40:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试过许多不同的解决方案,但当我的程序启动时,结果总是一片空白,下面是我的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代码,保存为“太棒了.kv“所有文件类型”:

^{pr2}$

当我启动python文件时,这总是给我一个黑屏,尽管我希望它有“helloworld!”写的。在

请帮忙!在


Tags: 文件代码fromimport程序app解决方案label
2条回答

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

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

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

^{pr2}$

您可以获得一个小部件作为这些方法的返回值

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

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

Label:
    text: 'Hello World!'

变量view将包含一个带有文本"Hello World!"Label小部件

另外,对我来说(使用kivyv1.9.2-dev0),只要你的app类被称为Awesome或{},你的应用就可以识别kv文件

由于this,请不要将小部件的名称用作自己的规则。您试图覆盖它,它可能会产生意外的结果。另外,正如Leva7在他的回答中所说的+自从Kivy1。真的。老了一个名为继承自App的类的.kv文件会自动加载,您可以在控制台中看到它。附加的“App”被剥离,例如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

^{pr2}$

示例:

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

相关问题 更多 >

    热门问题