【问题标题】:How do you compacted a GridLayout vertical space in Kivy?您如何在 Kivy 中压缩 GridLayout 垂直空间?
【发布时间】:2014-09-15 23:58:00
【问题描述】:

看看下面的截图:

我对这个 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 布局机制的最佳实践是什么。 :)

【问题讨论】:

    标签: python layout kivy


    【解决方案1】:

    在这种情况下,您可以利用GridLayout 的minimum_height 属性来调整其大小。

    GridLayout:
        cols: 1
        GridLayout:
            cols: 2
            row_default_height: '48dp'
            row_force_default: True
            spacing: 10, 10
            padding: 10, 10
    
            # add these two lines
            size_hint_y: None
            height: self.minimum_height
    
            ...
    

    【讨论】:

    • 嗨,瑞安,我已经试过了。但这会导致下面的选项卡式面板的高度较短。让它再次变得丑陋。我重新设计了应用程序,使所有控件都位于选项卡式面板下方
    【解决方案2】:

    由于您在根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 ...
    

    内部GridLayout 和TabbedPanel 是您的根GridLayout 的行/子级,因此为内部元素设置高度应该 允许foo 生成器重定向到拉起多余的空间。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-28
      • 1970-01-01
      相关资源
      最近更新 更多