重新初始化Pygame显示后“文本零宽度”错误?

时间:2013-12-31 02:33:42

标签: python pygame

我在Pygame 1.9.2中有一个项目,我多次重新初始化显示,并将文本绘制到显示表面。它工作正常,直到我关闭Pygame显示并再次重新初始化它。

它遵循这样的结构:

from pygame import *
init() # this is pygame.init()
running = True
while running:
    display.set_mode((800,600))
    visible = True
    textFont = font.SysFont("Comic Sans MS", 12)
    while visible:
        for evt in event.get():
            if evt.type == QUIT:
                visible = False
            if evt.type == KEYDOWN:
                if evt.key == K_ESCAPE:
                    visible = running = False
        textPic = textFont.render("Hello world!", True, (255,255,255))
        display.get_surface().blit(textPic, (0,0))
        display.flip()
    quit()

此程序一直有效,直到显示屏第一次关闭然后重新初始化,之后我在尝试使用textFont.render时收到以下错误:

pygame.error: Text has zero width

我正在试图弄清楚我的头发是什么问题......我知道"Hello world!"的宽度大于零。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

我找到了一个对我有用的解决方案:只需在调用pygame.display.quit()之前删除字体元素,即每次使用它时只删除del font

font元素是您使用以下命令创建的:

font.SysFont("Comic Sans MS", 12)

但我个人使用pygame.font.Font(None, font_size)

创建

答案 1 :(得分:0)

问题是在程序完成之前调用了pygame.quit()。这会导致每个 Pygame模块(例如pygame.font)未初始化。

不是依靠pygame.quit关闭Pygame显示,而是在每个pygame.display.quit循环结束时使用while running。然后将pygame.quit放在脚本的最末端,以便在其他模块完成使用后卸载它们。

(在呈现文本之前再次调用pygame.init()也不会解决此问题,因为它会导致Pygame显示停止响应。(这可能是Pygame 1.9.2的错误)