首页 > 解决方案 > 在显示屏外单击时,pygame 显示屏变得无响应

问题描述

我对使用 pygame 库和一般图形非常陌生。

我有一个递归函数,它通过回溯解决数独难题。我正在尝试使用 pygame 来可视化这个过程。

每次递归函数尝试一个新的有效数字时,它都会进行以下调用:

self.engine.draw_font(str(num), self.engine.get_position(i, j))

它调用的函数将该数字呈现到新的表面上:

def draw_font(self, string, position, bold=False):
    font = pg.font.SysFont(self.font, 25, bold=bold)
    textSurface = font.render(string, False, self.colors['text'])
    self.update(textSurface, position)

然后我将该表面blit到显示器上,并更新显示器的该部分:

def update(self, surface, position):
    rect = pg.Rect(position[0], position[1], 25, 25)
    color = self.display.get_at(position)
    self.display.fill(color, rect)
    self.display.blit(surface, position)
    pg.display.update(rect)

这个过程效果很好,屏幕上的数字会按照我的预期进行更新。但是,如果我尝试与显示器进行交互,例如:单击显示器外部,尝试移动显示器,甚至只是最小化显示器,那么 pygame 窗口就会冻结。

我需要做些什么不同的事情来使我的显示器更易于使用?

标签: pythongraphicspygamefreezeblit

解决方案


您必须处理递归函数中的事件。pygame.event.get()分别见pygame.event.pump()

对于游戏的每一帧,您都需要对事件队列进行某种调用。这确保您的程序可以在内部与操作系统的其余部分进行交互。

pygame.event.pump()在递归函数的开头调用。


推荐阅读