我正在尝试按下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:
循环,这意味着它多次输出输出 - 这不是我想要的结果。
请看下面的图片(顶部图片是我目前的结果,但是我想要的结果)
答案 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也是按键按下事件