
本文详解 KivyMD 升级至 2.x 后 MDFlatButton 报错的根源,明确其已被移除,并提供兼容的替代组件(MDButton + MDButtonText)、正确导入方式、KV 语法更新示例及关键注意事项。
本文详解 kivymd 升级至 2.x 后 `mdflatbutton` 报错的根源,明确其已被移除,并提供兼容的替代组件(`mdbutton` + `mdbuttontext`)、正确导入方式、kv 语法更新示例及关键注意事项。
KivyMD 自版本 2.0 起进行了重大重构,彻底移除了旧版中如 MDFlatButton、MDFillFlatButton、MDRaisedButton 等独立按钮类。取而代之的是统一、可组合的 MDButton(容器)与 MDButtonText(文本内容)组件体系。这一设计提升了灵活性与主题一致性,但也意味着所有基于 1.x 的按钮导入和 KV 写法必须同步更新。
✅ 正确导入与使用方式(KivyMD ≥ 2.0)
from kivy.lang import Builder
from kivymd.app import MDApp
from kivymd.uix.dialog import MDDialog
# ✅ 替换旧导入:移除 from kivymd.uix.button import MDFlatButton
from kivymd.uix.button import MDButton, MDButtonText # ✅ 新式按钮核心组件
from kivy.core.window import Window
Window.size = (300, 450)
KV = '''
Screen:
MDButton:
style: "filled" # 可选值:"filled", "outlined", "text"
pos_hint: {"center_x": 0.5, "center_y": 0.5}
on_release: app.login()
MDButtonText:
text: "LOG IN"
font_size: 15
'''? 关键说明:
- MDButton 是容器控件,负责样式(style)、尺寸、交互逻辑;
- MDButtonText 是其子组件,专用于定义显示文本及字体属性;
- on_press 已统一为 on_release(更符合触摸交互习惯),推荐使用;
- MDFillFlatButton 等旧 KV 名称不再有效,需改用 MDButton + style 控制外观。
⚠️ 常见错误与注意事项
- 不要混用新旧命名:MDFillFlatButton、MDRaisedButton 等 KV 标签在 2.x 中已完全失效,强制使用将导致 ParserException;
-
确保版本匹配:运行 pip show kivymd 确认版本 ≥ 2.0.0;若仍为 1.x,请执行:
pip uninstall kivymd pip install kivymd --pre # 安装最新稳定预发布版(推荐)
- 样式参数不可省略:MDButton 必须显式设置 style 属性(如 "filled"),否则默认不渲染内容;
- 主题适配自动生效:MDButton 深度集成 KivyMD 主题系统,无需额外配置即可响应 theme_cls.theme_style 和 primary_palette 变更。
? 总结
ImportError: cannot import name 'MDFlatButton' 并非安装问题,而是 KivyMD 架构演进的必然结果。开发者应主动拥抱新组件范式:以 MDButton 为基座、通过 MDButtonText 等子组件扩展内容,并利用 style 属性统一管理视觉风格。此举不仅解决当前报错,更能提升代码可维护性与未来兼容性。务必查阅 KivyMD 官方文档 — Buttons 获取完整样式选项与高级用法(如图标按钮、加载状态等)。










