You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 11:06:03