Python Pygame未正确处理键盘或鼠标事件
我最近在Mac上重新安装了pygame。我安装了PyGame1.9.2a0。我在windows上有相同的版本,在Mac上也有相同的版本。但是我在这个新的安装中得到了奇怪的结果。我注意到所有的draw命令都可以正常工作,但由于某些原因,单击pygame窗口无法正常工作。窗口在后台打开,这不正常,但不是什么大问题。但是,所有按键都会重定向到终端/IDE(应用程序从该终端运行)。我在下面附上了一个我正在测试的非常简单的程序。程序只是寻找转义键。请注意,这在我的windows计算机上运行良好 TL;DR:为什么选择了pygame窗口时,按键会发送到终端而不是pygame窗口的事件循环 我对这个问题感到困惑,主要是因为我以前从未经历过类似的问题。我也不确定如何调试这个问题。如果需要更多信息,我很乐意提供Python Pygame未正确处理键盘或鼠标事件,python,python-3.x,pygame,Python,Python 3.x,Pygame,我最近在Mac上重新安装了pygame。我安装了PyGame1.9.2a0。我在windows上有相同的版本,在Mac上也有相同的版本。但是我在这个新的安装中得到了奇怪的结果。我注意到所有的draw命令都可以正常工作,但由于某些原因,单击pygame窗口无法正常工作。窗口在后台打开,这不正常,但不是什么大问题。但是,所有按键都会重定向到终端/IDE(应用程序从该终端运行)。我在下面附上了一个我正在测试的非常简单的程序。程序只是寻找转义键。请注意,这在我的windows计算机上运行良好 TL;DR
import pygame
import sys
from pygame.locals import *
pygame.init()
size = width, height = 100, 100
screen = pygame.display.set_mode(size)
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
elif event.type == KEYDOWN:
if event.key == K_ESCAPE:
pygame.event.post(pygame.event.Event(QUIT))
screen.fill((30, 30, 30))
pygame.display.flip()
对于好奇的人:
- MacOSX 10.10.1
- Python 3.4.2(通过pyenv)
- Pygame:1.9.2a0
我有一个理论认为在一个新的提交中出现了某种问题。所以我决定把他们的存储库拉下来,恢复到以前的提交。这似乎相当有希望,特别是因为他们在2015年1月初进行了一次“大爆炸”合并,共有8个左右的请求。因此,在大规模合并发生之前,我将存储库拉回到提交状态,问题完全相同。我决定对其他几个提交(合并位置前后)执行此操作,但仍然没有更改。有什么建议吗?看起来您正在尝试在不必使用角落里的X的情况下设置关机键。这就是我在需要的时候所做的
key = pygame.key.get_pressed()
running = 1
while running:
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
running = 0
elif key[pygame.K_ESCAPE]:
pygame.quit()
running = 0
希望这有帮助。
顺便说一下,转义键并不总是有效的,所以可以将其设置为不同的键绑定。
对于鼠标,您需要检查鼠标的位置
def run():
pos = pygame.mouse.get_pos()
#check_events
check_events(pos)
如果您只是想在按下退出键的同时退出游戏,那么您应该在事件循环中执行以下操作
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
pygame.quit()
quit()
这只会盖上逃生钥匙。如果需要,可以稍后添加窗口“X”按钮。Windows和Apple pygame版本之间会出现一些问题
希望这有助于解决您的问题 你预计会发生什么?发生了什么事?我没有经历过这样的问题。这是什么?@AJ Pygame不应该在Pygame窗口处于活动状态时将按键重定向到终端/IDE。不管代码是什么。Pygame以某种方式将这些按键重定向到终端(或IDE)。测试程序的目的是当按下退出键时,事件循环处理按钮事件并正确退出。这不是在当前的Mac安装中完成的,但在Windows安装中确实可以。