关闭pygame窗口而不退出

时间:2012-10-19 12:23:48

标签: python pygame pyopengl

我打开一个pygame窗口并使用pyopengl调用在其上绘制一些东西:

def run(facets, SCREEN_SIZE=(800, 600)):
  pygame.init()
  screen = pygame.display.set_mode(SCREEN_SIZE, HWSURFACE|OPENGL|DOUBLEBUF)

  glViewport(0, 0, SCREEN_SIZE[0], SCREEN_SIZE[1])
  glMatrixMode(GL_PROJECTION)
  glLoadIdentity()
  gluPerspective(60.0, float(SCREEN_SIZE[0])/SCREEN_SIZE[1], .1, 1000.)
  glMatrixMode(GL_MODELVIEW)
  glLoadIdentity()

  clock = pygame.time.Clock()

  glMaterial(GL_FRONT, GL_AMBIENT, (0.1, 0.1, 0.1, 1.0))
  glMaterial(GL_FRONT, GL_DIFFUSE, (1.0, 1.0, 1.0, 1.0))

  pygame.mouse.set_visible(False)
  pygame.event.set_grab(True)

  while True:
    for event in pygame.event.get():
      if event.type == QUIT:
        pygame.quit()
        pygame.display.quit()
        print "returning..."
        return
      if event.type == KEYUP and event.key == K_ESCAPE:
        pygame.quit()
        pygame.display.quit()
        print "returning..."
        return

    pygame.mouse.set_visible(False)

    # Clear the screen, and z-buffer
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)

    # other game loop code here, e.g. rendering the facets
    # and moving the viewport around.

我已经离开了几乎所有的pygame和pyopengl调用,以防它们中的任何一个是相关的。

我想要发生的事情:在bpython / IDLE / interactive python提示符下运行会话,调用run()并查看内容,点击ESC并拥有它关闭窗口并将我返回到我的提示。

实际发生的事情:运行我的交互式会话,构建数据结构,调用run(),查看内容,点击ESC并关闭窗口,然后立即重新打开。离开的唯一方法是杀死python进程(这不仅会杀死我的交互式会话,而且在bpython中使我的shell窗口无法运行。)注意,我也看到{{1}的结果在现在已经不存在的shell中。

我见过这些问题:

但是他们只让我变得偏执:pygame是否真的如此资源泄漏,你必须退出python 让它整理它的烂摊子?

此外,什么黑暗魔法导致我对print "returning..."次来电不会返回

最后,有人能告诉我如何以我想要的方式完成这项工作吗?即使完全邪恶的不支持的黑客也没关系,因为我只需要使用这个3D渲染器来调试我的其他代码,看看我在做什么!

2 个答案:

答案 0 :(得分:0)

答案是:始终发布所有代码!

这是调用代码中的缩进错误,它一遍又一遍地调用run()pygame窗口似乎非常高兴退出交互式提示。

如果我有耐心按ESC 9次,我也会看到这一点。

答案 1 :(得分:-1)

我总是使用

sys.exit()

只记得导入sys