我编写了以下简单程序,该程序应打印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。
我认为我错过了一些直接的东西,但我发现在网上没有类似的东西。任何帮助将非常感激。
答案 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 .....