我尝试了很多不同的解决方案,但在我的程序启动时总是会出现一个空的黑屏,这是我的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!”写入。
请帮助!
答案 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)只要您的应用类被称为Awesome
或AwesomeApp
答案 1 :(得分:1)
由于this,请不要将小部件的名称用作您自己的规则。您尝试覆盖它,它可能会有意想不到的结果。另外,正如Leva7在他的回答+自Kivy 1.really.old中所说的那样,一个名为继承自App的类的.kv文件被自动加载,你可以在控制台中看到它。额外的&#34; App&#34;剥离,例如剥离MyApp(App)将查找my.kv
此外,如果您使用python main.py -m inspector
和Ctrl+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()