如何修改KivyMD中Snackbar组件的字体?
KivyMD中Snackbar组件字体修改方法
直接传font_name参数不生效的原因
- Snackbar组件本身没有对外暴露直接绑定文本字体的初始化参数,实例化时传入的
font_name不会被内部负责渲染文本的MDLabel控件读取,无法作用到实际显示的文本上 - 你示例代码里的
ex.ttf没有加引号,会被Python识别为变量而非字体路径字符串,本身也存在语法问题
可行实现方案
方案1:实例化后修改内部文本控件属性
先创建Snackbar实例,找到内部承载文本的标签控件,单独给它设置字体属性后再弹出:
from kivymd.uix.snackbar import Snackbar # 1. 先实例化Snackbar对象 snack = Snackbar(text="hi") # 2. 给内部文本标签设置字体,注意字体路径要传字符串,确保文件可访问 snack.ids.text_bar.font_name = "ex.ttf" # 3. 弹出Snackbar snack.open()
如果运行提示找不到
text_bar这个id,可以打印snack.ids查看当前版本Snackbar内部的控件id映射,老版本KivyMD的文本标签id可能为label。
方案2:传入自定义内容控件
如果需要更高的自定义自由度,可以自己创建带指定字体的MDLabel,作为内容传入Snackbar:
from kivymd.uix.label import MDLabel from kivymd.uix.snackbar import Snackbar # 自定义带目标字体的文本标签 custom_text = MDLabel( text="hi", font_name="ex.ttf" ) # 传入自定义内容生成Snackbar snack = Snackbar(content=custom_text) snack.open()
注意事项
- 传入的字体路径要确保程序有权限读取,建议把字体文件放在项目目录下,传入相对路径或者完整绝对路径
- 如果字体加载失败,Kivy会自动回退到默认字体,不会抛出明确报错,可以先单独测试MDLabel加载对应字体,确认字体文件本身可用
内容的提问来源于stack exchange,提问作者mohammad soltani
相关产品推荐
相关产品推荐

