pygame 在显示屏外单击时显示屏变得无响应

pygame display becomes unresponsive when clicking outside of the display

我对使用 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 window 冻结。

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

你必须在递归函数中处理事件。见 pygame.event.get() respectively pygame.event.pump():

For each frame of your game, you will need to make some sort of call to the event queue. This ensures your program can internally interact with the rest of the operating system.

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