在Pygame中导入谷歌字体遇窗口闪退问题求助
解决Pygame加载压缩包字体导致窗口闪退的问题
嘿,我来帮你搞定这个Pygame字体加载的问题!咱先搞明白为啥窗口会秒关:Pygame的pygame.font.Font()方法根本不支持直接读取压缩包里的字体文件,你直接传zip文件路径的话,会触发加载失败的异常,导致程序直接崩溃,窗口自然就秒关了。
下面给你两种可行的解决方案:
方案一:解压字体文件(最简单直接)
- 把
Mansalva.zip压缩包里的字体文件(一般是.ttf或.otf格式,比如Mansalva-Regular.ttf)解压出来,放到你的resources/fonts文件夹里。 - 修改代码,指向解压后的字体文件路径:
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
相关产品推荐
相关产品推荐

