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

Kivy应用中文显示异常:MDTopAppBar及加载弹窗字符呈星号

KivyMD中文显示异常排查与解决

问题场景

  • MDLabel中文显示正常:已安装文泉驿微米黑字体,在MDLabel中指定该字体后中文显示正常:

    MDLabel:
        size_hint_x: 0.5
        text: "结果(条):"
        font_name: 'WenQuanYi Micro Hei'
    

    MDLabel正常显示中文

  • MDTopAppBar右侧操作项提示异常:同样设置font_name后,右侧操作项的中文提示显示为星号:

    MDTopAppBar:
        title: "Preview"
        font_name: 'WenQuanYi Micro Hei'
        right_action_items: [["home",  lambda x: root.SwitchScreen('HomeScreen'),"返回首页"],["power", lambda x: app.on_custom_stop(),"退出"]]
        md_bg_color: app.theme_cls.primary_dark
    

    MDTopAppBar操作项显示星号

  • 加载弹窗中文显示异常:已在应用顶部注册字体并设置UTF-8编码:

    # -*- coding: utf-8 -*-
    from kivy.core.text import LabelBase
    LabelBase.register(name='WenQuanYi Micro Hei', fn_regular='/usr/share/fonts/truetype/wqy/wqy-microhei.ttc')
    

    但执行start_process_preprocessedImage方法时,加载弹窗的中文仍显示为星号(如****Loading model...)

原因与解决办法

1. MDTopAppBar操作项提示的问题

MDTopAppBar的右侧操作项提示是由内部的MDTooltip组件渲染的,不会继承TopAppBar的font_name设置,得单独给ToolTip指定字体:

方法一:全局设置ToolTip字体

在应用初始化代码里添加:

from kivymd.uix.tooltip import MDTooltip

# 全局给所有ToolTip指定字体
MDTooltip.font_name = 'WenQuanYi Micro Hei'

方法二:KV语言自定义样式

在KV文件开头添加:

<MDTooltip>:
    font_name: 'WenQuanYi Micro Hei'

2. 加载弹窗的问题

加载弹窗(比如MDProgressDialog或自定义弹窗)的文本组件没有使用指定字体,得手动给弹窗内的文本组件设置font_name:

如果是MDProgressDialog:

创建弹窗时遍历内部组件,给Label设置字体:

from kivymd.uix.dialog import MDProgressDialog

def show_loading_dialog():
    dialog = MDProgressDialog(text="加载模型中...")
    # 找到弹窗内的文本组件并设置字体
    for widget in dialog.content_cls.children:
        if hasattr(widget, 'font_name'):
            widget.font_name = 'WenQuanYi Micro Hei'
    dialog.open()

如果是自定义弹窗:

确保弹窗内所有文本组件(如MDLabel)都显式指定font_name: 'WenQuanYi Micro Hei'

额外检查项

  • 确认字体注册成功:打印已注册字体列表,看文泉驿微米黑是否在其中:
    print(LabelBase.list_fonts())
    
  • 全局统一字体(可选):通过修改主题样式,让所有组件默认使用该字体,避免逐个设置:
    from kivymd.app import MDApp
    
    class YourApp(MDApp):
        def build(self):
            # 给常用文本样式指定字体
            self.theme_cls.font_styles["Body1"] = "WenQuanYi Micro Hei"
            self.theme_cls.font_styles["Button"] = "WenQuanYi Micro Hei"
            self.theme_cls.font_styles["Caption"] = "WenQuanYi Micro Hei"
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 17:42:44