PyGame字体详解

字体初始化

在pygame程序中,第一步势必进行初始化,即调用pygame.init()函数,而此初始化过程,则顺便包含了字体初始化,即默不作声地调用了pygame.font.init()函数。下面通过pygame.font中的get_init()函数进行查询,结果如下

import pygame
from pygame import font

font.get_init()      # False
pygame.init()
font.get_init()      # True
font.quit()
font.get_init()      # False

其中quit用于取消字体的初始化。

获取字体

pygame可以很方便地判断当前字体,并且能够获取系统字体,示例如下

font.get_default_font() # 'freesansbold.ttf'
lst = font.get_fonts()
print(lst[:5])
# ['arial', 'arialblack', 'bahnschrift', 'calibri', 'cambria']
font.match_font('arial')
#'C:\\WINDOWS\\Fonts\\ARIALN.TTF'

其中,

  • get_default_font() 获取默认字体
  • get_fonts() 获取系统所有的字体列表
  • font.match_font(‘arial’) 获取系统中名为arial的字体的路径

字体对象

pygame中封装了字体类,在实例化过程中,一般需要两个参数,分别是字体路径以及文字尺寸。在初始化字体后,可通过render来渲染具体的文字。

path = 'C:\\WINDOWS\\Fonts\\ARIALN.TTF'
font.init()
f = font.Font(path, 50)
msg = f.render("FONT", True, (255, 255,255))

其中,render函数的参数如下

  • text 将要展示的文字
  • antialias 是否开启抗锯齿
  • color 颜色,(255,255,255)表示纯白

在设置好字体后,接下来便可在主循环中展示

pygame.init()
screen = pygame.display.set_mode((400, 200))
while True:
    if pygame.QUIT in [e.type for e in pygame.event.get()]:
        pygame.quit()
        break
    screen.fill((0,0,0))
    screen.blit(msg, (150, 60))
    pygame.display.flip()

效果如下

在这里插入图片描述

内置方法

上面的FONT其实并不协调,主要是尺寸与窗口并不匹配,从而无法做到居中,为此可通过size函数获取文字所占据的像素尺寸。

# 由于上面的代码段执行了pygame.quit(),所以需要重新初始化
pygame.init()
f = font.Font(path, 50)
f.size("FONT")  # (112, 58)
screen = pygame.display.set_mode((200, 100))
while True:
    if pygame.QUIT in [e.type for e in pygame.event.get()]:
        pygame.quit()
        break
    screen.fill((0,0,0))
    screen.blit(msg, (44, 21))
    pygame.display.flip()

效果如下

在这里插入图片描述

如果想获得每个文字的尺寸,则可使用metrics(text)方法,其返回值是一个列表,每个元素都代表text中的一个文字尺寸,格式为(minx, maxx, miny, maxy, advance),前四项比较好理解,advance表示前进偏移量。

另有一些获取文字尺寸的函数如下

  • get_linesize() 获取字体文本的行间距
  • get_height() 获取字体的高度
  • get_ascent() 获取字体的上升高度,即从字体基线到字体顶部的像素数。
  • get_descent() 获取字体的下降高度,即从字体基线到字体底部的像素数。

Font类中还内置了一些方法,用于设置或获取字体格式,这些方法一般由set和get成对出现

功能说明 set get
下划线 set_underline(b) get_underline()
粗体 set_bold(b) get_bold()
斜体 set_italic() get_italic()

猜你喜欢

转载自blog.csdn.net/m0_37816922/article/details/134916770
今日推荐