布局

布局用于计算和分配控件的位置。

Layout 类本身不能直接使用。您应该使用以下布局类之一:

理解`Widget`中的`size_hint`属性

size_hint 是一个由布局用于管理其子部件尺寸的元组值。它表示相对于布局尺寸的大小,而非绝对尺寸(以像素/点/厘米等为单位)。其格式为:

widget.size_hint = (width_proportion, height_proportion)

比例以0-1范围内的浮点数指定。例如,0.5代表50%,1代表100%。

如果你希望一个控件的宽度是父控件宽度的一半,而高度与父控件的高度相同,你可以这样做:

widget.size_hint = (0.5, 1.0)

如果你不想对宽度或高度使用size_hint,可以将该值设为None。例如,要创建一个宽250像素、高为父容器高度30%的控件,可以这样做:

widget.size_hint = (None, 0.3)
widget.width = 250

作为 Kivy 属性,这些也可以通过构造函数参数进行设置:

widget = Widget(size_hint=(None, 0.3), width=250)

在 1.4.1 版本发生变更: reposition_child 内部方法(误设为公开)已被移除。

class kivy.uix.layout.Layout(**kwargs)[源代码]

基类:Widget

布局接口类,用于实现所有布局。更多信息请参阅模块文档。

add_widget(widget, *args, **kwargs)[源代码]

将此控件添加为该控件的子控件。

参数:
widget: Widget

要添加到我们子控件列表中的控件。

index:整数,默认为0

在列表中插入控件的索引。请注意,默认值0意味着控件被插入到列表的开头,因此会绘制在其他同级控件之上。关于索引和控件层次结构的完整讨论,请参阅 控件编程指南

在 1.0.5 版本加入.

canvas:字符串,默认为 None

用于添加控件画布的Canvas。可以是'before'、'after'或None(默认画布)。

在 1.9.0 版本加入.

>>> from kivy.uix.button import Button
>>> from kivy.uix.slider import Slider
>>> root = Widget()
>>> root.add_widget(Button())
>>> slider = Slider()
>>> root.add_widget(slider)
do_layout(*largs)[源代码]

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

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

在 1.0.8 版本加入.

layout_hint_with_bounds(sh_sum, available_space, min_bounded_size, sh_min_vals, sh_max_vals, hint)[源代码]

(内部)根据控件尺寸的(潜在)最小或最大边界,为所有控件计算合适的(尺寸)提示。hint 列表将更新为合适的尺寸。

它遍历所有提示,对于任何其提示会导致违反最小或最大约束的部件,它会修正该提示。在所有部件被修正后,剩余或缺失的空间会根据它们的大小提示分配给各个部件,使其变小或变大。

该算法除了通过输入参数传递的信息外,对控件一无所知,因此它相当通用,可以根据尺寸提示按约束条件进行布局。

参数:
sh_sum:浮点数

大小提示的总和(基本上是 sum(size_hint))。

available_space:浮点数

所有size hint不为None的widget可用的像素数量。不能为零。

min_bounded_size:浮点数

根据各控件的 size_hint_min 所需的最小空间量(基本上是 sum(size_hint_min))。

sh_min_vals:列表或可迭代对象

可迭代对象中的每一项都是每个 widget 的 size_hint_min。可以为 None。长度应与 hint 相同。

sh_max_vals:列表或可迭代对象

可迭代对象中的每一项是每个 widget 的 size_hint_max。可以为 None。长度应与 hint 相同。

hint:列表

一个列表,其大小与 sh_min_valssh_min_vals 的长度相同,其中每个元素是对应元素的大小提示值。此列表会被就地更新为正确的大小提示,以确保约束不被违反。

返回:

无。hint 会在原地更新。

remove_widget(widget, *args, **kwargs)[源代码]

从该部件的子部件中移除一个部件。

参数:
widget: Widget

要从我们的子控件列表中移除的控件。

>>> from kivy.uix.button import Button
>>> root = Widget()
>>> button = Button()
>>> root.add_widget(button)
>>> root.remove_widget(button)