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

Mac系统下pygame的MOD_SHIFT按键事件无法触发该如何解决?

问题原因及解决方法

核心错误

你混淆了pygame修饰键掩码和普通按键常量的使用场景:pygame.KMOD_SHIFT是修饰键状态掩码,不属于按键key的枚举值,直接和event.key做相等判断的条件永远不成立,因此调试打印不会触发,功能无法生效。

两种可选解决方法

方案1:监听Shift按键事件

直接匹配左右Shift的按键常量,修改你的事件循环内代码即可:

while running:
    screen.fill((0, 0, 0))
    x, y = pygame.mouse.get_pos()
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        if event.type == pygame.MOUSEBUTTONDOWN:
            rectangle = "green"
        if event.type == pygame.MOUSEBUTTONUP:
            rectangle = "red"
        if event.type == pygame.KEYDOWN:
            # 同时匹配左右Shift按键
            if event.key in (pygame.K_LSHIFT, pygame.K_RSHIFT):
                modshift = "down"
                print("debug shift")
            # 同时匹配左右Ctrl按键
            if event.key in (pygame.K_LCTRL, pygame.K_RCTRL):
                modctrl = "down"
        if event.type == pygame.KEYUP:
            if event.key in (pygame.K_LSHIFT, pygame.K_RSHIFT):
                modshift = "up"

方案2:直接读取修饰键实时状态

如果不需要依赖按键事件触发逻辑,可以随时调用pygame.key.get_mods()方法,通过位运算判断修饰键状态,这种方式不用写在事件循环内:

# 任意需要获取Shift状态的位置调用即可
mod_state = pygame.key.get_mods()
if mod_state & pygame.KMOD_SHIFT:
    modshift = "down"
else:
    modshift = "up"

内容的提问来源于stack exchange,提问作者I_like_python

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 19:27:01