Pygame,有没有办法从显示器查看整个事件队列?

时间:2017-12-01 09:36:46

标签: python python-3.x events pygame

正如问题所述,我想知道在运行结束时是否有任何实际的方法来查看整个事件队列。我对pygame很新,到目前为止我唯一熟悉的两个方法是:pygame.event.get()和pygame.event.poll()。事实是,这两种方法都删除了它在队列中的相应事件 - 最有可能节省我假设的空间。

这意味着我需要能够在运行结束时打印出整个事件,我的代码如下:

import pygame
pygame.init()

screen = pygame.display.set_mode((500,300))
thing = 0
while thing < 100000000:
    thing += 1

event = pygame.event.get()
print (event)
pygame.quit()

这段代码的问题在于,每当我尝试移动pygame窗口时,它都没有响应,我无法与它进行交互,每当我尝试创建一个新的pygame窗口时都会发生这种情况,我能够点击并移动它 - 但是当我点击关闭按钮时,窗口没有响应,我不得不通过控制台关闭它。有没有更有效的替代方法呢?

1 个答案:

答案 0 :(得分:1)

您运行长时间运行的while循环停止窗口 - 它不会立即关闭 - 但您不会从系统获取事件以识别QUIT事件并退出循环。

当您单击关闭按钮时,它不会关闭窗口。它将事件QUIT发送到您的程序,您可以决定做什么 - 您可以退出循环然后它结束程序,但您也可以在关闭前保存一些数据,或者您可以询问用户是否确实要退出等等。

获取事件的标准mainloop是简单的,当您按下结束按钮(事件QUIT)时它会结束程序。

import pygame

pygame.init()

screen = pygame.display.set_mode((500,300))

# --- mainloop / event loop ---
running = True

while running:

    for event in pygame.event.get():
        print (event)
        if event.type == pygame.QUIT: # <-- closing button was pressed
            running = False # it will exit `while` loop

pygame.quit()