2012-10-19 74 views
1

我打開一個窗口的Pygame並得出一些東西,它與pyopengl要求是這樣的:關閉窗口Pygame的不退出

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 /交互式Python提示符會話,打電話run()和看東西,打ESC並將它關閉該窗口,並返回我對我的提示。

到底發生了什麼:運行我的互動環節,建立數據結構,稱之爲run(),看的東西,打ESC和窗口關閉,但隨後立即重新打開。唯一的辦法是殺死python進程(這不僅會殺死我的交互式會話,而且會在bpython中讓我的shell窗口無法運行。)注意,我也在現在不存在的shell中看到print "returning..."的結果。

我看到這些問題:

,但他們只讓我相當偏執:是pygame的真的那麼資源漏泄,你必須退出蟒蛇讓它清理它的爛攤子?

另外,什麼黑暗的魔法導致我的return來電不返回

最後,任何人都可以告訴我如何以我想要的方式使這項工作?即使是完全邪惡的不受支持的黑客也沒問題,現在,因爲我只需要使用此3D渲染器來調試其他代碼,以瞭解我在做什麼!

+0

相信IDLE有一些事情,像這樣的問題。你可能會從命令行運行更好的運行,做同樣的事情。 – ninMonkey

+0

(問題實際上並不存在,請參閱我的答案。) – tehwalrus

回答

0

答案是:始終發佈您的所有代碼!

這是調用代碼中的縮進錯誤,它一遍又一遍地調用run()pygame窗口似乎非常高興退出交互式提示。

我也會看到這個,如果我有耐心按ESC 9倍。

-1

我總是用

sys.exit() 

只記得導入SYS