盒布局

_images/boxlayout.gif

BoxLayout 将子组件按垂直或水平方向排列在盒子中。

要上下排列控件,请使用垂直的BoxLayout:

layout = BoxLayout(orientation='vertical')
btn1 = Button(text='Hello')
btn2 = Button(text='World')
layout.add_widget(btn1)
layout.add_widget(btn2)

要将控件并排排列,请使用水平 BoxLayout。在此示例中,我们在子控件之间使用 10 像素的间距;第一个按钮占据水平空间的 70%,第二个按钮占据 30%:

layout = BoxLayout(spacing=10)
btn1 = Button(text='Hello', size_hint=(.7, 1))
btn2 = Button(text='World', size_hint=(.3, 1))
layout.add_widget(btn1)
layout.add_widget(btn2)

位置提示部分生效,具体取决于方向:

  • 如果方向是 vertical:将使用 xrightcenter_x

  • 如果方向是 horizontal:将使用 ytopcenter_y

Kv 示例:

BoxLayout:
    orientation: 'vertical'
    Label:
        text: 'this on top'
    Label:
        text: 'this right aligned'
        size_hint_x: None
        size: self.texture_size
        pos_hint: {'right': 1}
    Label:
        text: 'this on bottom'

您可以查看 examples/widgets/boxlayout_poshint.py 文件,获取一个实时示例。

备注

size_hint 使用减去所有固定尺寸控件后剩余的空间。例如,如果你有一个宽度为800像素的布局,并像这样添加三个按钮:

btn1 = Button(text='Hello', size=(200, 100), size_hint=(None, None))
btn2 = Button(text='Kivy', size_hint=(.5, 1))
btn3 = Button(text='World', size_hint=(.5, 1))

第一个按钮将按指定宽度为200像素,第二个和第三个按钮将各为300像素,例如(800-200)* 0.5。

在 1.4.1 版本发生变更: pos_hint 添加了支持。

class kivy.uix.boxlayout.BoxLayout(**kwargs)[源代码]

基类:Layout

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

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 版本加入.

minimum_height

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

在 1.10.0 版本加入.

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

minimum_size

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

在 1.10.0 版本加入.

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

minimum_width

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

在 1.10.0 版本加入.

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

orientation

布局的方向。

orientation 是一个 OptionProperty,默认值为 'horizontal'。可设置为 'vertical' 或 'horizontal'。

padding

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

padding也接受双参数形式[水平内边距,垂直内边距]和单参数形式[内边距]。

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

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

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)
spacing

子控件之间的间距,以像素为单位。

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