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

如何在Python中使用Ursina检测左右Shift按键的按下事件

Ursina引擎左右Shift键按下事件检测方案

原生功能实现(推荐优先使用)

Ursina 3.0及以上版本原生支持区分左右Shift键,无需引入第三方依赖,有两种常用检测方式:

  • 实时检测按住状态:直接调用全局变量held_keys判断对应按键状态
  • 监听单次按下/抬起事件:在input回调函数中匹配对应按键名

示例代码

from ursina import *

app = Ursina()

# 每帧执行,检测持续按住状态
def update():
    if held_keys['left shift']:
        print("左Shift处于按住状态")
    if held_keys['right shift']:
        print("右Shift处于按住状态")

# 按键触发时执行,检测单次按下/抬起
def input(key):
    if key == 'left shift':
        print("左Shift被按下")
    if key == 'right shift':
        print("右Shift被按下")
    if key == 'left shift up':
        print("左Shift被抬起")
    if key == 'right shift up':
        print("右Shift被抬起")

Text(text="按下/按住左右Shift测试效果", position=(0, 0.3), scale=2)

app.run()

第三方库兼容方案(仅适用于Ursina旧版本不支持原生检测的场景)

如果使用的Ursina版本过低无法识别左右Shift按键,可以使用pynput库实现需求,它可以精确识别各类左右修饰键,和Ursina的兼容性良好。

使用步骤

  • 安装依赖:执行命令 pip install pynput
  • 结合Ursina的实现代码如下:
from ursina import *
from pynput import keyboard

app = Ursina()

# 按键按下回调
def on_press(key):
    if key == keyboard.Key.shift_l:
        print("左Shift被按下")
    elif key == keyboard.Key.shift_r:
        print("右Shift被按下")

# 按键抬起回调
def on_release(key):
    if key == keyboard.Key.shift_l:
        print("左Shift被抬起")
    elif key == keyboard.Key.shift_r:
        print("右Shift被抬起")

# 启动后台监听线程,daemon参数保证程序退出时监听线程自动关闭
listener = keyboard.Listener(on_press=on_press, on_release=on_release, daemon=True)
listener.start()

Text(text="使用pynput检测左右Shift", position=(0, 0.3), scale=2)

app.run()

注意:pynput默认是全局按键监听,如果需要仅监听Ursina窗口内的按键事件,可以额外增加Ursina窗口焦点判断逻辑。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 21:27:02