之前寫過一篇如何理解和使用BoxLayout中的size_hint婿屹?,解釋了為什么BoxLayout中如果有children widget不定義size_hint
時拼苍,widget的尺寸與預期不一致∮榘常現(xiàn)在發(fā)現(xiàn)如果BoxLayout中只有一個Widget酒奶,無論如何定義size_hint
关摇,都會出現(xiàn)某個方向(比如orientation為vertical
時的y)總是占滿全部Layout。
比如肆汹,如下的界面定義中愚墓,預期是:標簽寬度為窗口寬度的0.5,高度也為其0.5昂勉。實際上浪册,寬度符合預期,高度依然是窗口的高度岗照。這究竟是怎么回事呢村象?
BoxLayout:
orientation: "vertical"
Label:
text: "abc"
size_hint: 0.5, 0.5
Google了一下,發(fā)現(xiàn)了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進行說明,所以總感覺很奇怪圆裕。明白了其中的概念后就豁然開朗了广鳍。希望能對遇到同樣問題的開發(fā)者有所幫助。