weixin_46431344 2024-07-28 11:10 采纳率: 0%
浏览 3

kivy加载两种字体

kivy 需要同时使用两种字体。先使用msyh.ttc, 缺少呈现文本所需的字形再用arial.ttf
不会使用
from kivy.uix.label import Label
from kivy.core.text import FontContextManager as FCM

# Create a font context containing system fonts + one custom TTF
FCM.create('system://myapp')
family = FCM.add_font('/path/to/file.ttf')

# These are now interchangeable ways to refer to the custom font:
lbl1 = Label(font_context='system://myapp', family_name=family)
lbl2 = Label(font_context='system://myapp', font_name='/path/to/file.ttf')

# You could also refer to a system font by family, since this is a
# system:// font context
lbl3 = Label(font_context='system://myapp', family_name='Arial')

字体上下文是加载多种字体的命名空间;如果字体是 缺少呈现文本所需的字形,它可能会回退到不同的字体 相同的上下文。字体上下文管理器可用于查询和操作 使用 Pango 文本提供程序时字体上下文的状态
我的大量label都有两种字体,所以我想通过字体上下文管理器来实现缺少呈现文本所需的字形,回退到其它的字体。这样的话就可以同时显示两种字体
  • 写回答

1条回答 默认 最新

  • 专家-司宇[在线] 2024-07-28 11:10
    关注

    引自免费微信小程序:皆我百晓生

    要加载两种不同的字体到Kivy应用中,您可以在Label类中添加两个参数:font_contextfont_name。例如,如果您想要在应用中加载名为Arial的系统字体以及一个自定义的TTF字体(路径为'/path/to/file.ttf'),您可以按照下面的步骤操作:

    from kivy.app import App
    from kivy.lang import Builder
    from kivy.uix.label import Label
    from kivy.uix.floatlayout import FloatLayout
    from kivy.uix.button import Button
    from kivy.uix.widget import Widget
    from kivy.uix.boxlayout import BoxLayout
    from kivy.properties import ObjectProperty
    from kivy.config import Config
    import os
    
    Config.set('graphics', 'resizable', False)
    
    class CustomFontLoader(App):
        def build(self):
            return BoxLayout(orientation='vertical')
    
        def on_start(self):
            # Load the Arial font from the system
            ArialFont = 'system://fonts/Arial'
            
            # Load the custom TTF font with path '/path/to/file.ttf'
            CustomFont = 'file:///android_asset/path/to/file.ttf'
    
            # Set the font contexts for both the labels
            lbl1 = Label(font_context=ArialFont)
            lbl2 = Label(font_context=CustomFont)
            
            return [lbl1, lbl2]
    
    if __name__ == '__main__':
        CustomFontLoader().run()
    

    在这个例子中,我们首先通过Builder解析XML文件,然后创建一个BoxLayout作为主布局。我们还定义了一个on_start方法,在这个方法中,我们调用了on_start方法,并设置了两个Label组件,其中一个包含系统字体,另一个包含自定义字体。

    注意:这个示例使用了config.py文件中的Config对象来设置图形界面的可调整性。如果您没有配置此文件,那么这些更改可能不会生效。此外,确保您已将所需字体文件放在正确的目录结构中,以便它们可以被找到。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 7月28日

悬赏问题

  • ¥15 软件供应链安全是跟可靠性有关还是跟安全性有关?
  • ¥15 电脑蓝屏logfilessrtsrttrail问题
  • ¥20 关于wordpress建站遇到的问题!(语言-php)(相关搜索:云服务器)
  • ¥15 【求职】怎么找到一个周围人素质都很高不会欺负他人,并且未来月薪能够达到一万以上(技术岗)的工作?希望可以收到写有具体,可靠,已经实践过了的路径的回答?
  • ¥15 Java+vue部署版本反编译
  • ¥100 对反编译和ai熟悉的开发者。
  • ¥15 带序列特征的多输出预测模型
  • ¥15 Python 如何安装 distutils模块
  • ¥15 关于#网络#的问题:网络是从楼上引一根网线下来,接了2台傻瓜交换机,也更换了ip还是不行
  • ¥15 资源泄露软件闪退怎么解决?