解决KivyMD中文显示不正确问题(开发阶段,非打包,非ini)

182 阅读1分钟

刚开始笔者也是采用了网上Kivy的修改方法:加字体、改.ini中的默认字体,后来发现还是不OK。

偶然间看到知名男性交友网站‘给他哈勃’上的一个方案: github.com/kivymd/Kivy…

您可以使用word查看您想要使用的字体。

另外,您可以使用kivy标签类注册新的字体源,也可以使用字体管理器创建新的字体主题。

阅读 kivyLabel 文档,了解如何更深入地注册他们的框架。

或者,如果您不想太深入,您可以阅读 kivymd 文档/教程,了解如何添加新的字体样式[https://kivymd.readthedocs.io/en/latest/themes/theming/# kivymd.theming.ThemeManager.font_styles](https://kivymd.readthedocs.io/en/latest/themes/theming/#kivymd.theming.ThemeManager.font_styles)

另外,您还需要研究字体的工作原理,因为您将使用与英语不同的字符(与正常代码不同的代码)

进入文档,查看到这个源代码

from kivy.core.text import LabelBase
from kivy.lang import Builder

from kivymd.app import MDApp
from kivymd.font_definitions import theme_font_styles

KV = '''
MDScreen:

    MDLabel:
        text: "JetBrainsMono"
        halign: "center"
        font_style: "JetBrainsMono"
'''


class MainApp(MDApp):
    def build(self):
        self.theme_cls.theme_style = "Dark"

        LabelBase.register(
            name="JetBrainsMono",
            fn_regular="JetBrainsMono-Regular.ttf")

        theme_font_styles.append('JetBrainsMono')
        self.theme_cls.font_styles["JetBrainsMono"] = [
            "JetBrainsMono",
            16,
            False,
            0.15,
        ]
        return Builder.load_string(KV)


MainApp().run()

image.png 解决了,okkk。也许会有更加根本性的方案解决,但是可能控制的default字体文档在kivyMD和Kivy中的不是同一个.ini,这个还需要后续做进一步确认。

附mycode:

from kivymd.app import MDApp
from kivymd.uix.label import MDLabel
from kivy.core.text import LabelBase
from kivymd.font_definitions import theme_font_styles

class MainApp(MDApp):
    def build(self):
        LabelBase.register(name='chinese',fn_regular='data/fonts/AlibabaPuHuiTi-3-35-Thin.ttf')
        theme_font_styles.append('chinese')
        self.theme_cls.font_styles["chinese"] = [
            "chinese",  
            50,         #大小
            False,      #加粗
            0.15,
        ]
        return MDLabel(text="Hello, World,开心快乐每一天", halign="center",font_style='chinese')


MainApp().run()

方法二

找到kivymd中的font_definations.py文档,修改除了icon之外的fn_regular,完美解决

"""
Themes/Font Definitions
=======================

.. seealso::

   `Material Design spec, The type system <https://material.io/design/typography/the-type-system.html>`_
"""

from kivy.core.text import LabelBase

from kivymd import fonts_path

fonts = [
    {
        "name": "Roboto",
        "fn_regular": fonts_path + "AlibabaPuHuiTi-3-35-Thin.ttf",
        "fn_bold": fonts_path + "AlibabaPuHuiTi-3-35-Thin.ttf",
        "fn_italic": fonts_path + "AlibabaPuHuiTi-3-35-Thin.ttf",
        "fn_bolditalic": fonts_path + "AlibabaPuHuiTi-3-35-Thin.ttf",
    },
    {
        "name": "RobotoThin",
        "fn_regular": fonts_path + "AlibabaPuHuiTi-3-35-Thin.ttf",
        "fn_italic": fonts_path + "AlibabaPuHuiTi-3-35-Thin.ttf",
    },
    {
        "name": "RobotoLight",
        "fn_regular": fonts_path + "AlibabaPuHuiTi-3-35-Thin.ttf",
        "fn_italic": fonts_path + "AlibabaPuHuiTi-3-35-Thin.ttf",
    },
    {
        "name": "RobotoMedium",
        "fn_regular": fonts_path + "AlibabaPuHuiTi-3-35-Thin.ttf",
        "fn_italic": fonts_path + "AlibabaPuHuiTi-3-35-Thin.ttf",
    },
    {
        "name": "RobotoBlack",
        "fn_regular": fonts_path + "AlibabaPuHuiTi-3-35-Thin.ttf",
        "fn_italic": fonts_path + "AlibabaPuHuiTi-3-35-Thin.ttf",
    },
    {
        "name": "Icons",
        "fn_regular": fonts_path + "materialdesignicons-webfont.ttf",
    },
]

# fonts = [
#     {
#         "name": "Roboto",
#         "fn_regular": fonts_path + "Roboto-Regular.ttf",
#         "fn_bold": fonts_path + "Roboto-Bold.ttf",
#         "fn_italic": fonts_path + "Roboto-Italic.ttf",
#         "fn_bolditalic": fonts_path + "Roboto-BoldItalic.ttf",
#     },
#     {
#         "name": "RobotoThin",
#         "fn_regular": fonts_path + "Roboto-Thin.ttf",
#         "fn_italic": fonts_path + "Roboto-ThinItalic.ttf",
#     },
#     {
#         "name": "RobotoLight",
#         "fn_regular": fonts_path + "Roboto-Light.ttf",
#         "fn_italic": fonts_path + "Roboto-LightItalic.ttf",
#     },
#     {
#         "name": "RobotoMedium",
#         "fn_regular": fonts_path + "Roboto-Medium.ttf",
#         "fn_italic": fonts_path + "Roboto-MediumItalic.ttf",
#     },
#     {
#         "name": "RobotoBlack",
#         "fn_regular": fonts_path + "Roboto-Black.ttf",
#         "fn_italic": fonts_path + "Roboto-BlackItalic.ttf",
#     },
#     {
#         "name": "Icons",
#         "fn_regular": fonts_path + "materialdesignicons-webfont.ttf",
#     },
# ]
for font in fonts:
    LabelBase.register(**font)

theme_font_styles = [
    "H1",
    "H2",
    "H3",
    "H4",
    "H5",
    "H6",
    "Subtitle1",
    "Subtitle2",
    "Body1",
    "Body2",
    "Button",
    "Caption",
    "Overline",
    "Icon",
]
"""
.. image:: https://github.com/HeaTTheatR/KivyMD-data/raw/master/gallery/kivymddoc/font-styles-2.png
"""