目录
- 网格布局
- 背景
- 列宽与行高
- 使用GridLayout
GridLayoutGridLayout.col_default_widthGridLayout.col_force_defaultGridLayout.colsGridLayout.cols_minimumGridLayout.do_layout()GridLayout.minimum_heightGridLayout.minimum_sizeGridLayout.minimum_widthGridLayout.orientationGridLayout.paddingGridLayout.row_default_heightGridLayout.row_force_defaultGridLayout.rowsGridLayout.rows_minimumGridLayout.spacing
GridLayoutException
网格布局¶
在 1.0.4 版本加入.
GridLayout 将子组件排列成矩阵形式。它获取可用空间并将其划分为列和行,然后将组件添加到生成的“单元格”中。
在 1.0.7 版本发生变更: 实现已改为使用控件的 size_hint 来计算列/行尺寸。uniform_width 和 uniform_height 已被移除,并新增了其他属性,以便您获得更多控制。
背景¶
与其他许多工具包不同,你不能显式地将控件放置在特定的列/行中。每个子控件都会根据布局配置及其在子控件列表中的索引自动分配位置。
GridLayout 必须始终至少有一个输入约束:GridLayout.cols 或 GridLayout.rows。如果您未指定 cols 或 rows,该布局将抛出异常。
列宽与行高¶
列宽/行高通过以下3个步骤确定:
初始尺寸由
col_default_width和row_default_height属性决定。若要自定义单个列或行的大小,请使用cols_minimum或rows_minimum。子组件的`size_hint_x`/`size_hint_y`会被考虑在内。如果没有组件设置尺寸提示,则所有子组件将使用最大尺寸。
您可以通过设置
col_force_default或row_force_default属性来强制使用默认尺寸。这将强制布局忽略子组件的 width 和 size_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'))
现在,让我们将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'))
接下来,让我们将行高固定为特定大小:
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'))
- 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]。