【问题标题】:closing pygame windows without quitting在不退出的情况下关闭 pygame 窗口
【发布时间】:2012-10-19 22:46:31
【问题描述】:

我打开一个 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 窗口无法运行。)注意,我也 确实看到了 print "returning..." 的结果现已失效的外壳。

我看过这些问题:

但它们只会让我变得相当偏执:pygame 真的如此资源泄漏,以至于您必须退出 python 才能让它收拾烂摊子吗?

另外,是什么黑魔法导致我的return 调用不返回

最后,谁能告诉我如何按照我想要的方式进行这项工作?就目前而言,即使是完全邪恶且不受支持的 hack 也很好,因为我只需要使用这个 3D 渲染器调试我的其他代码,看看我在做什么!

【问题讨论】:

  • 我相信 IDLE 在某些方面存在问题,例如这样。你可能有更好的运气从命令行运行,做同样的事情。
  • (这个问题实际上并不存在,看我的回答。)

标签: python pygame pyopengl


【解决方案1】:

答案是:总是发布你所有的代码!

这是调用代码中的一个缩进错误,它一遍又一遍地调用run()pygame windows 似乎非常乐意退出到交互式提示。

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

【讨论】:

    【解决方案2】:

    我总是用

    sys.exit()
    

    记得导入系统

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-20
      • 1970-01-01
      • 1970-01-01
      • 2021-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多