在命令行中退出pygame窗口

2024-05-23 19:08:58 发布

您现在位置:Python中文网/ 问答频道 /正文

在这里发表我的第一篇文章(或者坦率地说是任何论坛),但是我想知道为什么当窗口的退出按钮[x]被按下时我不能退出。我试过:

#print "Exit value ", pygame.QUIT
for et in pygame.event.get():
    #print "Event type ", et.type
    if et.type == pygame.KEYDOWN:
            if (et.key == pygame.K_ESCAPE) or (et.type == pygame.QUIT):
                    print "In Here"
                    return True;
pygame.event.pump()# not quite sure why we do this
return False;

我发现pygame.QUIT打印了一个值12,当我运行程序时,当我单击[x]时,一个事件类型打印了“12”。“在这里”的字串在这些场合从不打印。当返回为真时(当我在键盘上按ESC键时),程序将正确退出。我看了一些相关的问题:所以

我不是在闲着跑,我是在跑:

EclipseJuno服务版本1。
Python2.7.3和PyGame2.7的最新版本(截至2013年3月4日)。
Windows 7&8和Ubuntu 12.04LTS(除了Ubuntu中没有声卡错误外,结果相同)

我在Windows7中运行时双击了运行该程序的.py文件,但仍无法在[x]上退出。提前谢谢。


Tags: 程序版本eventreturnifubuntutype文章
2条回答

你的主回路应该是这样的

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

    # draw etc...
    pygame.display.update()

然后,如果你把“完成”切换到任何地方,它就会很好地退出。

在你的事件循环中

#print "Exit value ", pygame.QUIT
for et in pygame.event.get():
    #print "Event type ", et.type
    #-----------------------------------------------------------------#
    if et.type == pygame.KEYDOWN:
            if (et.key == pygame.K_ESCAPE) or (et.type == pygame.QUIT):
    #-----------------------------------------------------------------#
                    print "In Here"
                    return True;
pygame.event.pump()  # not quite sure why we do this
return False;

问题(在2#------------#之间)
让我们分析一下这一部分:

  1. 如果输入了If块,et.type == KEYDOWN
  2. 你对QUIT的检查在if et.type == KEYDOWN中。
  3. 因为et.typeKEYDOWN,所以它不能是QUIT。。
  4. 所以,您没有检查et.type == QUIT
    所以,即使你点击了“X”,你的窗口也不会退出。

怎么办?
QUITKEYDOWN的条件中拉出,类似于:

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

注:

  • 在这些返回语句之后不需要;
  • 总是在不同的if elif块中检查event.type,比如

    if event.type == pygame.QUIT:
         #...
    elif event.type == pygame.KEYDOWN:
         #...
    
  • 你不需要pygame.event.pump()在那里,见Here

相关问题 更多 >