你如何在Kivy中压缩GridLayout垂直空间?

时间:2014-09-15 23:58:01

标签: python layout kivy

看看下面的截图:

Kivy GridLayout screenshot

我在这个Kivy布局方案中有点新,之前我在PyQt工作了很多。在PyQt中,使用Spacer可以轻松摆脱空白的垂直空间。但你怎么在Kivy这样做?下面是构成此布局的KV文件的一部分。

GridLayout:
        cols: 1
        GridLayout:
            cols: 2
            row_default_height: '48dp'
            row_force_default: True
            spacing: 10, 10
            padding: 10, 10

            Label:
                size_hint: None, None
                text: 'Input'
                halign: 'left'
                valign: 'top'
                text_size: self.size
                width: 50
            TextInput:
                id: txt_url
                size_hint: 1, None
                text: ''

        TabbedPanel:
            id: tp
            do_default_tab: False

            TabbedPanelItem:
                id: tab_fl
                text: ''
            TabbedPanelItem:
                text: ''
                FloatLayout
                    id: box
            TabbedPanelItem:
                text: ''
                FloatLayout
                    id: box

我很想知道使用Kivy布局机制的最佳做法是什么。 :)

2 个答案:

答案 0 :(得分:1)

在这种情况下,您可以利用GridLayout的{​​{1}}属性来适当调整大小。

minimum_height

答案 1 :(得分:0)

由于您在根GridLayout中使用了一个列宽,因此可以根据子高度调整行的大小,使用以下技巧设置rows_minimum

GridLayout:
    cols: 1
    row_force_default: True
    ## Call it what ya like, just interested in setting 'self.rows_minimum'
    foo: [self.rows_minimum.update({i: x.height}) for i, x in enumerate(reversed(list(self.children)))]
    ## ... rest of layout ...

内部GridLayoutTabbedPanel是您的根GridLayout的行/子项,因此设置内部元素的高度应该允许{{ 1}}生成器重定向到上拉多余的空间。

现在对于可能有多个列的读者来说,有一个更广泛的例子,它显示了一种处理网格布局和一堆其他好东西的自动调整大小的方法,而不是另一个关于文本输入的answer自动换行。