如何自动设置水平BoxLayout的高度

时间:2017-03-23 19:17:38

标签: layout kivy

所以我有一些简单的布局:

runAllManagedModulesForAllRequests="true"

stubborn_layout中小部件的高度计算得很好。但是,stubborn_layout本身的默认高度为100.我想要的是让它自动设置为孩子们拥有的任何大小。我可以手动将其设置到正确的高度,但这不是特别优雅或可维护。我能这样做吗?

或者我的做法可能是错的......但我找不到更适合我的其他布局。

1 个答案:

答案 0 :(得分:1)

你可以通过两种方式解决这个问题。如果你想坚持使用BoxLayout,你可以将它的高度绑定到一个子节点,例如Label小部件:

BoxLayout:
    id: stubborn_layout
    size_hint_y: None
    height: lbl.height # Bind to Label height to update according to font size, for example

    TextInput:
        id: ti
        multiline: False
        #size_hint_y: None # The height of TextInput will depend on Label

    Label:
        id: lbl # Add id for referencing in stubborn_layout
        text: 'things'
        size_hint_x: None
        size_hint_y: None
        size: self.texture_size
        font_size: 12 # Try different font sizes. stubborn_layout will update accordingly
        padding_x: 6
        padding_y: 6

然而,更优雅的方法是使用GridLayout并将其minimum_height属性绑定到height。这样,父布局将始终根据最高子项的高度进行更新。

GridLayout:
    id: stubborn_layout
    size_hint_y: None
    height: self.minimum_height # This does the trick of updating the height
    cols: 2 # If you want to add more children in horizontal layout, update the number of columns

    TextInput:
        id: ti
        multiline: False
        size_hint_y: None
        height: 300 # You can try different height values

    Label:
        text: 'things'
        size_hint_x: None
        size_hint_y: None
        size: self.texture_size
        font_size: 12 # Try different font_sizes
        padding_x: 6
        padding_y: 6

另一方面,请勿使用""适用于id属性(https://kivy.org/docs/guide/lang.html#referencing-widgets