在 Kivy 中使用构建器
Using builder in Kivy
我想创建一个简单的应用程序,它有一个带有按钮的 GUI,可以让我振动 android phone。我在我的 .yp 文件中使用 .kv 文件作为布局和 Builder
.py 文件:
from kivy.app import App
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.gridlayout import GridLayout
from kivy.lang import Builder
from plyer import vibrator
class AndroidApp(GridLayout):
def vibrate(self):
vibrator.vibrate()
kv = Builder.load_file("android_app.kv")
class MainApp(App):
def build(self):
return kv
if __name__ == "__main__":
MainApp().run()
.kv 文件:
#:import utils kivy.utils
<AndroidApp>:
FloatLayout:
canvas.before:
Color:
rgb: utils.get_color_from_hex("#ffffff")
Rectangle:
size: self.size
pos: self.pos
GridLayout:
rows: 1
cols: 2
Label:
text:"Android Vibrate"
Button:
text:"Android Vibrate"
on_press:
root.vibrate()
当我尝试 运行 应用程序时,出现以下错误:
enter image description here
这应该是一个简单的应用程序,但不知何故我找到了让它崩溃的方法。 android_app.py & .kv 文件位于同一文件夹中。为什么 window 不会被创建?我很感激任何帮助。
谢谢,
亚历克斯
您必须 return 主要 class,而不是构建的结果。这里我为了方便使用了Builder.load_string()
,并没有引入player
,除此之外唯一实质性的变化是我将return kv
改为了return AndroidApp()
from kivy.app import App
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.gridlayout import GridLayout
from kivy.lang import Builder
KV = '''
#:import utils kivy.utils
<AndroidApp>:
FloatLayout:
canvas.before:
Color:
rgb: utils.get_color_from_hex("#ffffff")
Rectangle:
size: self.size
pos: self.pos
GridLayout:
rows: 1
cols: 2
Label:
text:"Android Vibrate"
Button:
text:"Android Vibrate"
on_press:
root.vibrate()
'''
class AndroidApp(GridLayout):
def vibrate(self):
vibrator.vibrate()
Builder.load_string(KV)
class MainApp(App):
def build(self):
return AndroidApp()
if __name__ == "__main__":
MainApp().run()
我想创建一个简单的应用程序,它有一个带有按钮的 GUI,可以让我振动 android phone。我在我的 .yp 文件中使用 .kv 文件作为布局和 Builder
.py 文件:
from kivy.app import App
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.gridlayout import GridLayout
from kivy.lang import Builder
from plyer import vibrator
class AndroidApp(GridLayout):
def vibrate(self):
vibrator.vibrate()
kv = Builder.load_file("android_app.kv")
class MainApp(App):
def build(self):
return kv
if __name__ == "__main__":
MainApp().run()
.kv 文件:
#:import utils kivy.utils
<AndroidApp>:
FloatLayout:
canvas.before:
Color:
rgb: utils.get_color_from_hex("#ffffff")
Rectangle:
size: self.size
pos: self.pos
GridLayout:
rows: 1
cols: 2
Label:
text:"Android Vibrate"
Button:
text:"Android Vibrate"
on_press:
root.vibrate()
当我尝试 运行 应用程序时,出现以下错误:
enter image description here
这应该是一个简单的应用程序,但不知何故我找到了让它崩溃的方法。 android_app.py & .kv 文件位于同一文件夹中。为什么 window 不会被创建?我很感激任何帮助。 谢谢, 亚历克斯
您必须 return 主要 class,而不是构建的结果。这里我为了方便使用了Builder.load_string()
,并没有引入player
,除此之外唯一实质性的变化是我将return kv
改为了return AndroidApp()
from kivy.app import App
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.gridlayout import GridLayout
from kivy.lang import Builder
KV = '''
#:import utils kivy.utils
<AndroidApp>:
FloatLayout:
canvas.before:
Color:
rgb: utils.get_color_from_hex("#ffffff")
Rectangle:
size: self.size
pos: self.pos
GridLayout:
rows: 1
cols: 2
Label:
text:"Android Vibrate"
Button:
text:"Android Vibrate"
on_press:
root.vibrate()
'''
class AndroidApp(GridLayout):
def vibrate(self):
vibrator.vibrate()
Builder.load_string(KV)
class MainApp(App):
def build(self):
return AndroidApp()
if __name__ == "__main__":
MainApp().run()