
kivymd 1.2.0 版本中 `snackbar` 组件移除了 `text` 初始化参数,导致按旧文档写法(如 `snackbar(text="message")`)报错;降级至 1.1.1 版本可恢复兼容用法。
在 KivyMD 1.2.0 中,Snackbar 的构造方式发生了重大变更:不再支持通过 text 参数直接初始化。这是由于该版本重构了 Snackbar 类,将其从一个简单文本提示组件升级为更灵活、可自定义内容的容器组件——其默认构造函数已移除 text 关键字参数,转而要求用户显式调用 open() 方法前,通过 Snackbar.text 属性赋值,或使用 Snackbar().open() 配合子控件(如 MDLabel)构建内容。
但需注意:官方文档(尤其是 1.2.0 对应文档)尚未完全同步更新此变更,仍大量引用旧版 text= 语法,造成开发者混淆。 实际测试表明,在 1.2.0 中执行以下代码会触发 TypeError:
from kivymd.uix.snackbar import Snackbar # ❌ 错误:KivyMD 1.2.0 中此写法不被支持 snack = Snackbar(text="Hello World!") # TypeError: __init__() got an unexpected keyword argument 'text'
✅ 正确做法(适配 1.2.0+):
《帝国网站管理系统》英文译为"Empire CMS",简称"Ecms",它是基于B/S结构,且功能强大而帝国CMS-logo易用的网站管理系统。本系统由帝国开发工作组独立开发,是一个经过完善设计的适用于Linux/windows引/Unix等环境下高效的网站解决方案。从帝国新闻系统1.0版至今天的帝国网站管理系统,它的功能进行了数次飞跃性的革新,使得网站的架
from kivymd.uix.snackbar import Snackbar
from kivymd.uix.label import MDLabel
# 方式1:设置 text 属性后 open()
snack = Snackbar()
snack.text = "Operation completed successfully!"
snack.open()
# 方式2:自定义内容(推荐用于复杂提示)
content = MDLabel(
text="Saved to clipboard",
theme_text_color="Custom",
text_color=(1, 1, 1, 1),
size_hint_x=1.0,
)
snack = Snackbar()
snack.add_widget(content)
snack.open()⚠️ 注意事项:
- 若你依赖旧项目结构或教程(尤其基于 1.1.x 编写),最快速兼容方案是降级至 kivymd==1.1.1:
pip uninstall kivymd -y pip install kivymd==1.1.1
- 降级后,Snackbar(text="...") 可正常工作,且行为与历史文档一致;
- 但需权衡:1.1.1 不包含 1.2.0 的新特性(如主题适配增强、性能优化等),长期项目建议迁移到新版 API 并采用属性赋值方式;
- 永远检查 kivymd.__version__ 以确认实际运行版本,避免因缓存或虚拟环境导致版本误判。
总结:问题本质是 KivyMD 主动弃用了 text 初始化参数,而非 Bug。开发者应根据所用版本选择对应 API —— 1.1.1 及以前用 Snackbar(text=...);1.2.0 及以后请改用 snack.text = ... + snack.open() 模式,以确保代码健壮性与未来兼容性。









