布局就是定义如何排列小部件
GridLayout:网格布局
https://kivy.org/doc/stable/api-kivy.uix.gridlayout.html
from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.gridlayout import GridLayout
class ExampleGridLayout(GridLayout):
def __init__(self, **kwargs):
super(ExampleGridLayout, self).__init__(**kwargs)
# 创建部件
btn1 = Button(text='Hello')
btn2 = Button(text='World')
btn3 = Button(text='Hi')
btn4 = Button(text='Kivy')
btn5 = Button(text='你好')
btn6 = Button(text='中国')
# 添加部件
self.add_widget(btn1)
self.add_widget(btn2)
self.add_widget(btn3)
self.add_widget(btn4)
self.add_widget(btn5)
self.add_widget(btn6)
class MyApp(App):
def build(self):
return ExampleGridLayout(rows = 3, cols = 2)
def on_stop(self):
print('应用程序已关闭')
if __name__ == '__main__':
MyApp().run()
代码解释
先通过参数 rows = 3, cols = 2 定义 3行2列的网格布局
然后依次向网格中的每个单元格填充部件
代码运行效果如下
如果同时定义了行数量 rows 和列数量 cols,那么部件的数量不能超出 rows * cols 的乘积
当然也可以只定义行数量 rows 或者只定义列数量 cols
在该布局下,不能将某个部件放到指定的单元格,部件的摆放是按照顺序自动分配的
修改代码如下:
只定义了列数量 cols=4
return ExampleGridLayout(cols = 4)
修改后代码运行效果如下:
关于布局方向
该布局下默认的布局方向是 lr-tb,即从 从左到右-从上到下
所有的布局方向包括:‘lr-tb’, ‘tb-lr’, ‘rl-tb’, ‘tb-rl’, ‘lr-bt’, ‘bt-lr’, ‘rl-bt’, ‘bt-rl’
其中字母:
l 表示左 left
r 表示右 right
t 表示顶 top
b 表示底 bottom
修改代码如下:
只定义了列数量 cols=2
定义了布局方向 orientation='bt-lr',即 从下到上-从左到右
return ExampleGridLayout(cols = 2, orientation='bt-lr')
修改后代码运行效果如下:
修改代码如下:
设定单元格的宽高
# 创建部件
btn1 = Button(text='Hello', size_hint_x=None, width=100)
btn2 = Button(text='World', size_hint_x=None, width=100)
return ExampleGridLayout(cols = 2, row_force_default=True, row_default_height=50, col_force_default=False, col_default_width=200)
代码解释
定义了按钮1和按钮2的宽度 size_hint_x=None, width=100
单元格的高度:强制使用默认值 row_force_default=True, row_default_height=50
单元格的宽度:如没有自定义,则使用默认值 col_force_default=False, col_default_width=200
修改后代码运行效果如下: