You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kivy使用kv文件时GridLayout的size_hint失效问题

Kivy布局异常:FileChooserListView占据整个GridLayout宽度的解决方法

你的问题根源在于布局嵌套冗余和GridLayout的子元素分配逻辑:

  1. MediaSorterScreen本身继承自GridLayout,但你在kv文件里又嵌套了一个GridLayout,外层未配置任何属性的GridLayout会默认让内部布局占满整个屏幕。
  2. 内部GridLayout设置了cols:2,但仅添加了一个BoxLayout作为子元素。GridLayout的默认行为是:当一行子元素数量小于列数时,会拉伸最后一个子元素填充整行宽度,导致你给BoxLayout设置的size_hint: (0.5, 1.0)被忽略,最终FileChooserListView撑满了整个GridLayout。

方案一:移除冗余的布局嵌套(推荐)

直接将MediaSorterScreen配置为cols:2的GridLayout,避免不必要的层级嵌套:

修改后的Python代码

from kivy.app import App
from kivy.uix.gridlayout import GridLayout
from kivy.lang import Builder

class MediaSorterScreen(GridLayout):
    def __init__(self, **kwargs):
        super(MediaSorterScreen, self).__init__(**kwargs)
        Builder.load_file('MediaSorter.kv')

class MediaSorter(App):
    def build(self):
        return MediaSorterScreen()
    
if __name__ == '__main__':
    MediaSorter().run()

修改后的MediaSorter.kv代码

<MediaSorterScreen>:
    cols: 2
    size: self.width - 200, self.height - 200
    pos: 100, 100

    BoxLayout:
        orientation: 'vertical'
        # cols=2的GridLayout默认每列占50%宽度,此属性也可省略
        size_hint_x: 0.5

        FileChooserListView:
            id: srcFolderInput
            path: 'D:\\Daniel'
            size_hint: 1.0, 1.0

    # 填充第二列(可根据需求替换为实际控件)
    BoxLayout:
        size_hint_x: 0.5

方案二:保留嵌套并补充第二列元素

如果必须保留原有布局嵌套,只需给内部GridLayout添加第二个子元素填充第二列,让GridLayout按cols:2的规则分配宽度:

修改后的MediaSorter.kv代码

<MediaSorterScreen>:
    GridLayout:
        cols:2
        size: root.width - 200, root.height -200
        pos: 100, 100

        BoxLayout:
            orientation: 'vertical'
            size_hint: (0.5, 1.0)

            FileChooserListView:
                id: srcFolderInput
                path: 'D:\\Daniel'
                size_hint: (1.0, 1.0)

        # 添加空BoxLayout填充第二列
        BoxLayout:
            size_hint: (0.5, 1.0)

内容的提问来源于stack exchange,提问作者Jeffrey Menashe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 18:20:28