无法让 pygame 键盘输入工作[重复]

问题描述 投票:0回答:2

我刚开始学习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
python pygame
2个回答
-1
投票

使用

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
以查看按下了哪个键。


-1
投票

我知道这确实很旧,但在搜索该主题时它仍然出现在第一个位置。根据给定的答案,它仍然无法工作,因为还需要初始化 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")
© www.soinside.com 2019 - 2024. All rights reserved.