Python pygame退出问题

时间:2015-01-11 14:15:34

标签: python pygame

我正在尝试按下ESC键时退出程序,但是如果单击了Windows退出按钮,也会尝试退出。

目前我有这段代码:

done = False
while not done:
    for event in pygame.event.get():
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_ESCAPE:
                done = True
                break # break out of the for loop
        elif event.type == pygame.QUIT:
            done = True
            break # break out of the for loop
    if done:
        break # to break out of the while loop

    # your game stuff
    for dict_containing_value in holdList:           
            i = dict_containing_value['value']
            #pygame.event.pump
            if (i=="("):
                drawBracketBox(bracketColor, x, y)
                label = myfont.render(str(i), 1, (0,0,0))
                screen.blit(label, ((x+x)*50+25,(y+y+y)*50+25))

                x=x+1
            elif (i==")"):
                drawBracketBox(bracketColor, x, y)
                label = myfont.render(str(i), 1, (0,0,0))
                screen.blit(label, ((x+x)*50+31,(y+y+y)*50+25))

                x=x+1
            elif (i=="IF"):
                drawFunctionBox(functionColor, x, y)
                label = myfont.render(str(i), 1, (0,0,0))
                screen.blit(label, ((x+x)*50+21,(y+y+y)*50+22))

                x=x+1
            elif (i=="sum"):
                drawFunctionBox(functionColor, x, y)
                label = myfont.render((i), 1, (0,0,0))
                screen.blit(label, ((x+x)*50+14,(y+y+y)*50+22))

                x=x+1
            elif (i=="+"):
                drawOperatorCircle(opColor, x, y)
                label = myfont.render(str(i), 1, (0,0,0))
                screen.blit(label, ((x+x)*50+31,(y+y+y)*50+22))

                x=x+1
            elif (i=="-"):
                drawOperatorCircle(opColor, x, y)
                label = myfont.render(str(i), 1, (0,0,0))
                screen.blit(label, ((x+x)*50+32,(y+y+y)*50+22))

                x=x+1
            elif (i=="*"):
                drawOperatorCircle(opColor, x, y)
                label = myfont.render(str(i), 1, (0,0,0))
                screen.blit(label, ((x+x)*50+31,(y+y+y)*50+26))

                x=x+1
            elif (i=="/"):
                drawOperatorCircle(opColor, x, y)
                label = myfont.render(str(i), 1, (0,0,0))
                screen.blit(label, ((x+x)*50+32,(y+y+y)*50+22))

                x=x+1
            else:
                drawConstantBox(constColor, x, y)
                label = myfont.render(str(i), 1, (0,0,0))
                screen.blit(label, ((x+x)*50+14,(y+y+y)*50+22))

                x=x+1
    pygame.display.update()

当前输出是连续循环我的for dict_containing_value in holdList:循环,这意味着它多次输出输出 - 这不是我想要的结果。

请看下面的图片(顶部图片是我目前的结果,但是我想要的结果) enter image description here

2 个答案:

答案 0 :(得分:0)

你可以创建一个终止函数:

def terminate():
    pygame.quit()
    sys.exit()

并在按下/释放转义键或/和调用quit事件时调用terminate()。

done = False
while not done:
    for event in pygame.event.get():
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_ESCAPE:
                done = True
        elif event.type == pygame.QUIT:
            done = True
    if done:
        terminate()

while True:
    for event in pygame.event.get():
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_ESCAPE:
                terminate()
        elif event.type == pygame.QUIT:
            terminate()

或者你可以在没有函数的情况下调用pygame.quit和sys.exit:

while True:
    for event in pygame.event.get():
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_ESCAPE:
                pygame.quit()
                sys.exit()

        elif event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()

答案 1 :(得分:0)

在按下按键之前(而不是之后)测试退出,因为ESC也是按键按下事件