在Kivy中使用自定义的字体

1、加载自定义字体
当我们需要使用不同的字体时,而每一种字体又有粗体、斜体、加粗斜体等不同的特性。
首先需要使用LabelBase.register方法来加载自定义的字体和字体特性。例如:

#main.py里对应的代码
LabelBase.register(name='Roboto',
    fn_regular='Roboto-Regular.ttf'
    fn_bold='Roboto-Bold.ttf'
    fn_italic='Roboto-Italic.ttf'
    fn_bolditalic='Roboto-BoldItalic.ttf'

这样做了之后,我们就能够设置Roboto特性的widget了。

另外需要知道的是这种方法的两种局限性:

  • Kivy只能使用TrueType .ttf 的字体文件,如果使用被封装成像OpenType .otf 或者网页字体格式的.woff,你就可能需要先去将它们进行转化。比较容易的方法是使用FontForge editor.

  • 字体最多只能使用四种类型:标准型、斜体型、加粗型、粗斜型。这样对于旧的字体库是可接受,像DroidSans,但是对于现代的字体通常有4-20种不同类型。所以在我们为应用程序选择哪种字体类型时,我们要注意不要将全部类型都扔进去,这会导致文件大小变得很大,而应该选择最常用的几种类型。

在这里我们选择两种字体类型:Roboto-Thin.ttf 和 Roboto-Medium.ttf,我们将它们分别分配给fn_regular和fn_bold.

from kivy.core.text import LabelBase
LabelBase.register(name='Roboto',
    fn_regular='data/fonts/Roboto-Thin.ttf',
    fn_bold='data/fonts/Roboto-Medium.ttf')

这段代码应该放在__name__=='__main__'之后,因为这段代码需要在接口被创建之前运行,否则在app类被实例化之后,才执行基础的初始化就太迟了,所以我们需要让这段代码提前运行。

现在我们已经有了一个自定义的字体,接着我们就可以将其分配给Label部件了。示例如下:

#clock.kv里对应的代码
        Label:
                text: 'Hello World-Bold'
                font_name: 'Roboto'
                bold: True   
                font_size: 60
        Label:
                text: 'Hello World-Regular'
                font_name: 'Roboto'
                font_size: 60

详见http://kivy.org/docs/api-kivy.core.text.html
运行main.py

完整代码如下:

# test.kv
BoxLayout:
        orientation: 'vertical'
        Label:
                text: 'Hello World-Bold'
                font_name: 'Roboto'
                bold: True
                font_size: 60
        Label:
                text: 'Hello World-Regular'
                font_name: 'Roboto'
                font_size: 60

# main.py
#!/usr/bin/python
from kivy.app import App

class Test(App):
        pass
if __name__=='__main__':
        from kivy.core.text import LabelBase
        LabelBase.register(name='Roboto',
                fn_regular = 'data/fonts/Roboto-Thin.ttf',
                fn_bold = 'data/fonts/Roboto-Medium.ttf')
        Test().run()

当需要加载多个自定义的字体库时,实现代码如下:

#  setting.py

#创建一个setting.py文件,存放自定义字体的信息
#使用一个由几个字典作为元素组成的列表
KIVY_FONTS = [
    {
        'name' :'Roboto',
        'fn_regular' :'data/fonts/Roboto-Thin.ttf',
        'fn_bold' :'data/fonts/Roboto-Medium.ttf',
    },
    {
        'name' :'DroidSans',
        'fn_regular':'data/fonts/DroidSans.ttf',
        'fn_italic':'data/fonts/DroidSans-Italic.ttf'
    }
]
# main.py

#!/usr/bin/python
from kivy.app import App
from kivy.core.text import LabelBase
from setting import KIVY_FONTS

class Test(App):
    pass
if __name__=='__main__':
    for fonts in KIVY_FONTS:
        LabelBase.register(**fonts)
    Test().run()
# test.kv

BoxLayout:
    orientation: 'vertical'
    Label:
        text: 'Roboto-Bold'
        font_name: 'Roboto'
        bold: True
        font_size: 60
    Label:
        text: 'DroidSans-Italic'
        font_name:'DroidSans'
        italic: True
        font_size: 60

运行显示如图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值