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

KivyMD中如何不通过font_size属性修改MDButton尺寸

问题根源

KivyMD 全系列按钮控件(MDFlatButton/MDRaisedButton/MDFillButton等)默认开启内部自适应尺寸逻辑,内置的尺寸更新方法会持续根据文本渲染宽高、内边距、字号自动重算控件尺寸,直接配置size_hint、size属性会被该逻辑覆盖,因此无法生效。
increment_width的作用是在自适应计算得出的宽度基础上追加固定偏移值,无法用来直接定义按钮总尺寸,自然达不到自定义尺寸的效果。

解决方案

方案1:完全对齐Kivy原生Button的尺寸设置逻辑

给按钮添加adaptive_size: False属性,直接关闭内置的自适应尺寸计算,后续即可和原生Button完全一致,自由配置size_hint、size属性定义尺寸,不会被内部逻辑覆盖。
修正后的可运行示例代码:

from kivy.lang import Builder
from kivymd.app import MDApp
KV = """
MDScreen:
    MDFlatButton:
        canvas.before:
            Color:
                rgba: 1,0,0,1
            Rectangle:
                size: self.size
                pos: self.pos
                
        text: 'MDButton'
        adaptive_size: False  # 关闭内置自适应尺寸规则
        size_hint: None, None
        size: "240dp", "90dp"  # 可按需自定义任意宽高
        pos_hint: {'center_x': .5, 'center_y': .5}
"""


class Example(MDApp):
    def build(self):
        return Builder.load_string(KV)

Example().run()

方案2:保留自适应逻辑,通过内边距调整尺寸

如果需要保留按钮随文本长度自动适配宽度的特性,无需修改字号,直接调整padding属性即可控制按钮尺寸。MDButton的自适应尺寸计算规则为:

实际宽度 = 文本渲染宽度 + 水平方向内边距总和
实际高度 = 文本渲染高度 + 垂直方向内边距总和
示例配置:

MDFlatButton:
    text: 'MDButton'
    padding: "48dp", "20dp"  # 水平内边距48dp、垂直内边距20dp,按钮尺寸会随padding值同步变化
    pos_hint: {'center_x': .5, 'center_y': .5}

注意:increment_width属于旧版本兼容属性,在新版KivyMD中优先级极低,不推荐用于尺寸控制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 03:39:24