网格布局

_images/gridlayout.gif

在 1.0.4 版本加入.

GridLayout 将子组件排列成矩阵形式。它获取可用空间并将其划分为列和行,然后将组件添加到生成的“单元格”中。

在 1.0.7 版本发生变更: 实现已改为使用控件的 size_hint 来计算列/行尺寸。uniform_widthuniform_height 已被移除,并新增了其他属性,以便您获得更多控制。

背景

与其他许多工具包不同,你不能显式地将控件放置在特定的列/行中。每个子控件都会根据布局配置及其在子控件列表中的索引自动分配位置。

GridLayout 必须始终至少有一个输入约束:GridLayout.colsGridLayout.rows。如果您未指定 cols 或 rows,该布局将抛出异常。

列宽与行高

列宽/行高通过以下3个步骤确定:

  • 初始尺寸由 col_default_widthrow_default_height 属性决定。若要自定义单个列或行的大小,请使用 cols_minimumrows_minimum

  • 子组件的`size_hint_x`/`size_hint_y`会被考虑在内。如果没有组件设置尺寸提示,则所有子组件将使用最大尺寸。

  • 您可以通过设置 col_force_defaultrow_force_default 属性来强制使用默认尺寸。这将强制布局忽略子组件的 widthsize_hint 属性,并使用默认尺寸。

使用GridLayout

在下面的例子中,所有控件将具有相同的大小。默认情况下,size_hint 为 (1, 1),因此控件将占据父容器的全部大小::

layout = GridLayout(cols=2)
layout.add_widget(Button(text='Hello 1'))
layout.add_widget(Button(text='World 1'))
layout.add_widget(Button(text='Hello 2'))
layout.add_widget(Button(text='World 2'))
_images/gridlayout_1.jpg

现在,让我们将Hello按钮的大小固定为100像素,而不是使用size_hint_x=1:

layout = GridLayout(cols=2)
layout.add_widget(Button(text='Hello 1', size_hint_x=None, width=100))
layout.add_widget(Button(text='World 1'))
layout.add_widget(Button(text='Hello 2', size_hint_x=None, width=100))
layout.add_widget(Button(text='World 2'))
_images/gridlayout_2.jpg

接下来,让我们将行高固定为特定大小:

layout = GridLayout(cols=2, row_force_default=True, row_default_height=40)
layout.add_widget(Button(text='Hello 1', size_hint_x=None, width=100))
layout.add_widget(Button(text='World 1'))
layout.add_widget(Button(text='Hello 2', size_hint_x=None, width=100))
layout.add_widget(Button(text='World 2'))
_images/gridlayout_3.jpg
class kivy.uix.gridlayout.GridLayout(**kwargs)[源代码]

基类:Layout

网格布局类。更多信息请参阅模块文档。

col_default_width

列的默认最小尺寸。

在 1.0.7 版本加入.

col_default_width 是一个 NumericProperty,默认值为 0。

col_force_default

如果为 True,则忽略子项的宽度和 size_hint_x,并使用默认列宽。

在 1.0.7 版本加入.

col_force_default 是一个 BooleanProperty,默认值为 False。

cols

网格中的列数。

在 1.0.8 版本发生变更: 从NumericProperty改为BoundedNumericProperty。你不能再将其设置为负值。

cols 是一个 NumericProperty,默认值为 None。

cols_minimum

每列最小宽度的字典。字典的键是列号,例如0、1、2...

在 1.0.7 版本加入.

cols_minimum 是一个 DictProperty,默认值为 {}。

do_layout(*largs)[源代码]

当布局被触发器调用时,会调用此函数。如果你正在编写一个新的布局子类,不要直接调用此函数,而应使用 _trigger_layout() 方法。

该函数默认在下一帧之前调用,因此布局不会立即更新。任何依赖于子组件位置等内容的操作都应安排在下一帧执行。

在 1.0.8 版本加入.

minimum_height

自动计算出的,为容纳所有子部件所需的最小高度。

在 1.0.8 版本加入.

minimum_height 是一个 NumericProperty,默认值为 0。它是只读的。

minimum_size

自动计算出的包含所有子部件所需的最小尺寸。

在 1.0.8 版本加入.

minimum_size 是 (minimum_width, minimum_height) 属性的 ReferenceListProperty。它是只读的。

minimum_width

自动计算出的包含所有子部件所需的最小宽度。

在 1.0.8 版本加入.

minimum_width 是一个 NumericProperty,默认值为 0。它是只读的。

orientation

布局的方向。

orientation 是一个 OptionProperty,默认值为 'lr-tb'。

有效的方向为'lr-tb'、'tb-lr'、'rl-tb'、'tb-rl'、'lr-bt'、'bt-lr'、'rl-bt'和'bt-rl'。

在 2.0.0 版本加入.

备注

'lr' 表示从左到右。'rl' 表示从右到左。'tb' 表示从上到下。'bt' 表示从下到上。

padding

布局框与其子项之间的内边距:[padding_left, padding_top, padding_right, padding_bottom]。

padding也支持双参数形式[水平内边距,垂直内边距]以及单参数形式[内边距]。

在 1.7.0 版本发生变更: 已将NumericProperty替换为VariableListProperty。

padding 是一个 VariableListProperty,默认值为 [0, 0, 0, 0]。

row_default_height

行使用的默认最小尺寸。

在 1.0.7 版本加入.

row_default_height 是一个 NumericProperty,默认值为 0。

row_force_default

如果为 True,则忽略子控件的 height 和 size_hint_y,并使用默认行高。

在 1.0.7 版本加入.

row_force_default 是一个 BooleanProperty,默认值为 False。

rows

网格中的行数。

在 1.0.8 版本发生变更: 已从NumericProperty更改为BoundedNumericProperty。您不能再将其设置为负值。

rows 是一个 NumericProperty,默认值为 None。

rows_minimum

每行的最小高度字典。字典的键是行号,例如0, 1, 2...

在 1.0.7 版本加入.

rows_minimum 是一个 DictProperty,默认值为 {}。

spacing

子控件之间的间距:[spacing_horizontal, spacing_vertical]。

spacing 也接受单参数形式 [spacing]。

spacing 是一个 VariableListProperty,默认值为 [0, 0]。

exception kivy.uix.gridlayout.GridLayoutException[源代码]

基类:Exception

网格布局操作失败时引发的异常。