pygame调用内置可用字体时报FileNotFoundError错误如何解决
问题成因
pygame.font.get_fonts() 返回的是当前系统中pygame可识别的字体别名列表,不是本地字体文件的路径。pygame.font.Font() 构造方法接收字符串作为第一个参数时,默认会将该字符串作为 字体文件的本地路径 去寻址,你直接传入字体别名comicsansms时,pygame会在程序运行的当前工作目录下查找名为comicsansms的文件,找不到对应文件就会抛出FileNotFoundError。
另外要注意:get_fonts()返回的字体 不是pygame内置自带的,全部是读取你当前运行系统里已经安装的字体,换设备运行如果对应字体没装在系统里,也会出现加载失败的问题。
修复方案
根据使用场景选对应方法即可:
- 直接加载系统匹配的字体:用专门对接系统字体的
pygame.font.SysFont()方法,这个方法原生支持传入get_fonts()返回的字体别名,会自动搜索系统路径匹配对应字体文件,写法如下:
# 参数依次为:字体别名、字号,可选传bold=是否粗体、italic=是否斜体 font = pygame.font.SysFont('comicsansms', size)
- 如果要坚持用
pygame.font.Font()加载,可以先通过pygame.font.match_font()获取字体文件的绝对路径,再传入构造方法:
# 先匹配字体文件路径 font_abs_path = pygame.font.match_font('comicsansms') # 再传入路径加载 font = pygame.font.Font(font_abs_path, size)
- 如果要做跨设备兼容,避免不同系统字体差异导致的加载问题,建议把需要用到的字体.ttf文件放到项目目录下,直接传入项目内的相对路径加载,这种方式最稳定:
# 例:字体文件存放在项目根目录的fonts文件夹下 font = pygame.font.Font('./fonts/ComicSansMS.ttf', size)
排查小技巧:如果调用
match_font()传入字体别名后返回None,说明当前系统里没有安装对应字体,要么换其他可用字体,要么手动把字体文件放到项目目录内加载。
内容的提问来源于stack exchange,提问作者plsHelpMe
相关产品推荐
相关产品推荐

