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