一、说明
kivy的界面可以有多种实现的方式,我们将一一的介绍。
二、代码
1、纯Python文件开发
# 导入Kivy 的App类,它是所有Kivy应用的基类
from kivy.app import App
#Kivy 内置了丰富的控件(widget), 如
# 按钮(button), 复选框(checkbox), 标签( l abel), 输入框(textinput),滚动容器(scrollable container) 等
from kivy.uix.button import Button
# 引入Box L ayout布局
from kivy.uix.boxlayout import BoxLayout
class MyLayout(BoxLayout):
# 初始化
def __init__(self, **kwargs):
super().__init__(**kwargs)
# 添加一个按钮
button = Button(text="hello world")
# 将按钮添加到页面控件中
self.add_widget(button)
# 从App类中继承了Kivy应用最基本的方法, 如创建窗口、设置窗口的大小和位置等
class MyApp(App):
# 实现TestApp类的build() 方法(继承自App类)
def build(self):
# build() 方法返回的控件, 在K ivy 中, 称之为“根控件" (root widget)
# Kivy将自动缩放根控件,让它填满整个窗口
return MyLayout()
#当.py文件被直接运行时, if __ name __ == '__ main _'之下的代码块将被运行
# 当.py文件以模块形式被导入时, if __ name __ == '__ main __'之下的代码块不被运行
if __name__ == "__main__":
MyApp().run()
2、Python文件 + .kv文件实现
- main.py
from kivy.app import App # 导入Kivy的基类,它是所有Kivy应用的基类
from kivy.uix.boxlayout import BoxLayout # 导入布局
class MyLayout(BoxLayout): # 布局类
def __init__(self, **kwargs): # 初始化
super().__init__(**kwargs)
class MyApp(App): # 继承App类
def build(self): # 实现App类的build()方法
# build()方法返回的控件,在kivy中,称之为“根控件”(root widget)
# Kivy将自动缩放根控件,让它填满整个窗口
return MyLayout()
if __name__ == "__main__":
MyApp().run()
- My.kv
kv文件的名字是不可以随便命名的。是程序启动之后,查找继承于App的类的名字,去掉App之后的名字(例"class MyApp(App):",Kivy就会查找my.kv文件)
<MyLayout>:
Button: # 添加一个按钮
text: "hello whg" # 按钮文本
3、Python访问kv
将kv内容放到py文件中,避免出现文件名错误,启动不成功的情况
from kivy.app import App
from kivy.lang import Builder
kv = Builder.load_string('''
Button:
text: "I was created by kv codes"
''')
class MyApp(App):
def build(self):
return kv
if __name__ == "__main__":
MyApp().run()
4、Python包含kv(推荐)
这个代码避免了文件名的问题,更方便使用。
# 导入Kivy 的App类,它是所有Kivy应用的基类
from kivy.app import App
# 引入BoxLayout布局
from kivy.uix.boxlayout import BoxLayout
# 导入kv组件
from kivy.lang import Builder
Builder.load_string('''
<MyLayout>:
Button: # 添加按键
text: "hello whg" # 设置按键名字
''')
class MyLayout(BoxLayout):
# 初始化
def __init__(self, **kwargs):
super().__init__(**kwargs)
# 继承App类
class MyApp(App):
# 实现App类的build()方法
def build(self):
# 设置APP名字
self.title = "demo"
# build()方法返回的控件,在kivy中
# 称之为“根控件”(root widget)
return MyLayout()
#当.py文件被直接运行时,之下的代码块将被运行
# 当.py文件以模块形式被导入时,之下的代码块不被运行
if __name__ == "__main__":
MyApp().run()