Pygame只检测鼠标事件,不检测KEYDOWN事件

时间:2017-02-28 15:01:39

标签: python pygame

我编写了以下简单程序,该程序应打印pygame.event.get()检测到的所有事件。

import pygame, sys
from pygame.locals import *

display = pygame.display.set_mode((300, 300))
pygame.init()

while True:
    for event in pygame.event.get():
        print(event)
        if event.type == QUIT:
            pygame.quit()
            sys.exit()

但是当我运行这个时,我只有鼠标事件,当我按两次大写锁定时,键盘和KEYUP事件被打印在终端中。当我使用任何其他键时,它们只会打印到终端,就像我在终端窗口中写一样。

<Event(4-MouseMotion {'pos': (102, 15), 'buttons': (0, 0, 0),
 'rel': (-197, -284)})>
<Event(2-KeyDown {'unicode': '', 'scancode': 0, 'key': 301, 'm
 od': 8192})>
<Event(3-KeyUp {'key': 301, 'scancode': 0, 'mod': 0})>
wasd

我使用的是Mac OSX 10.12.1,python 3.5.2和pygame 1.9.4.dev0。

我认为我错过了一些直接的东西,但我发现在网上没有类似的东西。任何帮助将非常感激。

3 个答案:

答案 0 :(得分:3)

如果您正在使用virtualenv,请不要使用virtualenv命令。

使用python3 -m venv

然后安装pygame(例如 pip3 install hg+http://bitbucket.org/pygame/pygame)。

有关此问题的详细信息,请参阅this thread

答案 1 :(得分:1)

对于仍在努力解决这个问题的人来说,这个问题在git上有记录并且已修复。 https://github.com/pygame/pygame/issues/203

只需从您的venv中卸载pygame,然后安装到版本以下。

pip install -U https://github.com/pygame/pygame/archive/master.zip

试过这个,最后可以在pygame中使用关键事件。

答案 2 :(得分:-1)

首先我怀疑你是,但是当你专注于pygame屏幕时,pygame只注册输入,所以就是这样。我没有直接回答你的问题,很抱歉,但我确实有我的解决方案或解决它。因为我不喜欢正常的事件系统我使用pygame.key.get_pressed()(https://www.pygame.org/docs/ref/key.html)只是因为我觉得它看起来更好,更具可读性。这可能只是我的一个坏习惯,虽然sooo .....