You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Pygame中导入谷歌字体遇窗口闪退问题求助

解决Pygame加载压缩包字体导致窗口闪退的问题

嘿,我来帮你搞定这个Pygame字体加载的问题!咱先搞明白为啥窗口会秒关:Pygame的pygame.font.Font()方法根本不支持直接读取压缩包里的字体文件,你直接传zip文件路径的话,会触发加载失败的异常,导致程序直接崩溃,窗口自然就秒关了。

下面给你两种可行的解决方案:

方案一:解压字体文件(最简单直接)

  1. 把Mansalva.zip压缩包里的字体文件(一般是.ttf或.otf格式,比如Mansalva-Regular.ttf)解压出来,放到你的resources/fonts文件夹里。
  2. 修改代码,指向解压后的字体文件路径:
pygame.init()
pygame.font.init()
# 替换成你解压后的实际字体文件名
myfont = pygame.font.Font("resources/fonts/Mansalva-Regular.ttf", 30)

方案二:从内存读取压缩包里的字体(无需解压)

如果你不想解压压缩包,可以用Python的zipfile模块读取压缩包里的字体数据,再让Pygame从内存加载:

import pygame
import zipfile

pygame.init()
pygame.font.init()

try:
    # 打开字体压缩包
    with zipfile.ZipFile("resources/fonts/Mansalva.zip", 'r') as zip_file:
        # 替换成压缩包里实际的字体文件名
        font_bytes = zip_file.read("Mansalva-Regular.ttf")
        # 从字节数据加载字体
        myfont = pygame.font.Font(None, 30)
        myfont = myfont.from_bytes(font_bytes)
except Exception as e:
    print(f"加载字体时出错:{str(e)}")
    pygame.quit()
    exit()

# 测试渲染文字(记得加上主循环,不然窗口还是会秒关!)
screen = pygame.display.set_mode((800, 600))
text = myfont.render("测试字体加载成功!", True, (255, 255, 255))

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
    screen.fill((0, 0, 0))
    screen.blit(text, (150, 250))
    pygame.display.flip()

pygame.quit()

额外调试技巧

以后遇到这种窗口秒关的情况,建议加个异常捕获块,这样能看到具体的错误信息,方便排查问题:

try:
    myfont = pygame.font.Font("resources/fonts/Mansalva.zip", 30)
except Exception as e:
    print(f"加载字体失败:{e}")
    # 让窗口停留一下,方便看错误
    input("按回车退出...")
    pygame.quit()

内容的提问来源于stack exchange,提问作者Gugu72

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:03:15