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
相关产品推荐
相关产品推荐

