Pygame无法同时检测鼠标左右键点击,右键需双击识别如何解决?
问题根因
- 你用
pygame.event.poll()每次循环仅处理1个事件,当左右键同时按下时两个MOUSEBUTTONDOWN事件会分两次循环返回,你的多分支elif判断逻辑会直接拦截第一个匹配的事件,第二个按键的事件会被错误跳过 - 你将事件触发判断和
pygame.mouse.get_pressed()的状态混合使用,触发MOUSEBUTTONDOWN事件的瞬间get_pressed的状态可能还未完成更新,和你自定义的left/right状态逻辑存在冲突
修复后可运行代码
import pygame, sys screen = pygame.display.set_mode((320, 200)) left = False right = False while True: # 一次性取出当前所有待处理事件,避免事件丢失 for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit() # 单独处理按键按下事件,根据event.button判断按键类型 elif event.type == pygame.MOUSEBUTTONDOWN: if event.button == 1 and not left: print('left press') left = True elif event.button == 3 and not right: print('right press') right = True # 单独处理按键释放事件 elif event.type == pygame.MOUSEBUTTONUP: if event.button == 1 and left: print('left release') left = False elif event.button == 3 and right: print('right release') right = False # 左右键同时按下的逻辑直接写在这里,按下瞬间就会触发 if left and right: print('左右键同时按下中') screen.fill((0, 0, 0)) pygame.display.flip()
修复说明
- 把单事件处理的
pygame.event.poll()替换为批量处理的pygame.event.get(),不会出现事件遗漏的问题 - 取消
get_pressed()的调用,直接通过event.button判断当前触发事件的是左键(值为1)还是右键(值为3),彻底避免状态和事件不同步的问题 - 事件判断逻辑拆分,不会因为多分支
elif拦截导致后续按键事件无法被识别 - 左右键同时点击的逻辑直接判断自定义的
left和right变量同时为True即可,会在两个按键都按下的第一时间触发
内容的提问来源于stack exchange,提问作者Ziyan Fang
相关产品推荐
相关产品推荐

