我刚开始学习python的一个项目,需要键盘输入。据我所知,pygame 是做到这一点的最佳方法。不幸的是我无法让
KEYDOWN
工作。唯一返回的事件 pygame.event.get()
是 MOUSEMOTION
。
我需要的代码是这样的:
import pygame
def main():
pygame.init()
while True:
for event in pygame.event.get()
if(event.type == pygame.KEYDOWN)
if(event.key==pygame.K_LEFT)
cry_because_it_worked()
我不确定我做错了什么。我读过一些有关键盘输入的其他问题,所有这些问题都建议使用据我所知是相同的代码。例如,这个问题的第一个答案的第一个代码块:How to get Keyboard input in pygame?
pygame.init()
返回(6,0)
,我相信这意味着所有模块都已正确初始化。我正在使用 python 3.4.3 和 pygame 1.9.2。任何帮助将不胜感激。
编辑:这是我的代码中的实际循环:
import pygame
...
def handleKeyInput(enigma):
pygame.init()
print("before loop")
while True:
for event in pygame.event.get():
print(event.type) #Always prints 4, which is the value of MOUSEMOTION
print(event.type == pygame.KEYDOWN) #Always prints false
if event.type == pygame.KEYDOWN:
#and then a bunch of if statements for all letters
使用
pygame.event.get
的正确代码如下所示:
import pygame
from pygame.locals import *
for event in pygame.event.get():
if event.type == QUIT: # if closing application
pygame.quit()
sys.exit()
elif event.type == KEYDOWN:
if event.key == K_LEFT:
cry_because_it_worked()
Pygame 事件不仅仅是按键。它们也可以是鼠标移动和其他东西。首先检查事件类型很重要。这就是为什么我们提出以下内容:
if event.type == KEYDOWN:
接下来您需要做的是检查正在按下的键。您可以通过读取
key
对象的 event
属性来完成此操作:
if event.key == K_LEFT:
因此,在您的程序中,您检查
event.type
以确保事件是按键,然后检查 event.key
以查看按下了哪个键。
我知道这确实很旧,但在搜索该主题时它仍然出现在第一个位置。根据给定的答案,它仍然无法工作,因为还需要初始化 pygame 显示并设置正确的显示模式。除此之外,pygame 窗口必须具有焦点(如一条评论中所述)。
工作脚本如下所示:
import sys
import pygame
from pygame.locals import *
pygame.init()
pygame.display.init()
pygame.display.set_mode((400, 600)) # if this is missing, the events won't be catched
while True:
for event in pygame.event.get():
if event.type == QUIT: # if closing application
pygame.quit()
sys.exit()
elif event.type == KEYDOWN:
print(event)
if event.key == K_LEFT:
print("LEFT")