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

KivyMD MDDialog未适配内部控件尺寸导致GridLayout内容溢出

问题原因

MDDialog加载自定义内容组件时,不会自动根据内容的实际尺寸调整弹窗大小,你创建的GridLayout默认启用了高度自适应(size_hint_y = 1),会匹配Dialog默认的内容区域高度,导致4行总高400的内容被裁剪。

解决方案

修改两处代码即可解决:

  • 给GridLayout关闭y轴自适应,手动设置总高度等于所有行的高度之和,可按需加内边距避免内容贴边
  • 可按需调整Dialog的宽度占比,优化显示效果

修改后的完整可运行代码如下:

from kivymd.app import MDApp
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.gridlayout import GridLayout
from kivy.uix.label import Label
from kivy.uix.button import Button
from kivymd.uix.dialog import MDDialog

class AppClass(MDApp):
        
    def build_toolbar(self):
        button = Button(text="Press")
        button.bind(on_press=self.popup)
        return button
    
    def build(self):
        self.theme_cls.theme_style = "Dark"
        layout = BoxLayout(orientation='vertical')
        toolbar = self.build_toolbar()
        layout.add_widget(toolbar)
        return layout
    
    def popup(self, instance):
        panel = self.build_settings_panel()
        self.dialog = MDDialog(
            type="custom",
            title="Settings",
            content_cls=panel,
            size_hint_x=0.8 # 弹窗宽度占屏幕80%,可自行调整
        )
        self.dialog.open()
        
    def build_settings_panel(self):
        row_num = 4
        row_height = 100
        padding = 20 # 上下左右内边距
        # 总高度 = 行数*每行高度 + 上下内边距总和
        total_height = row_num * row_height + padding * 2
        panel = GridLayout(
            cols=2, 
            row_default_height=row_height,
            size_hint_y=None, # 关闭y轴自适应,使用固定高度
            height=total_height,
            padding=padding,
            spacing=10 # 单元格之间的间距
        )
        for i in range(row_num):
            panel.add_widget(Label(text="Number"))
            panel.add_widget(Label(text=str(i)))
        return panel

if __name__ == '__main__':
    AppClass().run()

如果后续需要动态增减GridLayout的行数,只需要调整row_num的值即可,总高度会自动计算适配,不需要手动修改其他参数。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 20:27:04