BoxLayout中的size_hint(2)

之前写过一篇如何理解和使用BoxLayout中的size_hint?,解释了为什么BoxLayout中如果有children widget不定义size_hint时,widget的尺寸与预期不一致。现在发现如果BoxLayout中只有一个Widget,无论如何定义size_hint,都会出现某个方向(比如orientation为vertical时的y)总是占满全部Layout。

比如,如下的界面定义中,预期是:标签宽度为窗口宽度的0.5,高度也为其0.5。实际上,宽度符合预期,高度依然是窗口的高度。这究竟是怎么回事呢?

BoxLayout:
    orientation: "vertical"
    Label:
        text: "abc"
        size_hint: 0.5, 0.5

Google了一下,发现了Organizing with Layouts这篇文章,里面提到了一个可控尺寸(Controlled Dimension)的概念,豁然开朗。然后大略看了一下源码,果然如此。

原文是这么说的:A box layout control (manage, automatic assign) the sizes of its children in the controlled dimension using a simple calculation: a child's relative size is its hint size divided by the sum of all children's hint size.翻译成中文就是:在可控尺寸的方向上(vertical中的y和horizontal中的x),任一子Widget的相对尺寸=该Widget的对应size_hint / 该方向上所有size_hint的总和。

针对上面的例子,由于只有一个Widget,所以其相对高度 = 0.5 / 0.5 = 1。无论如何定义size_hint_y,该标签都会自动占满整个Layout的高度。

在BoxLayout的文档中,并没有对Controlled Dimension进行说明,所以总感觉很奇怪。明白了其中的概念后就豁然开朗了。希望能对遇到同样问题的开发者有所帮助。

参考

Organizing with Layouts

你可能感兴趣的:(BoxLayout中的size_hint(2))