Mes*_*ion 5 python keyboard curses num-lock
在我正在开发的游戏中,我想检测NUMLOCK 按键(或keyup),例如在按下时注册“回调”函数。
我并不是要求在给定时刻读取它的状态,我已经可以做到这一点,我也没有兴趣改变它的值。这是关于在按键发生时意识到按键的情况,这样我就不必每隔十分之一秒左右轮询一次其状态。
游戏使用的curses,目前是封锁getch()。Curses 不会检测NUMLOCK按键,我从来没有想到它会检测到(与 LED 相关的键盘不会“产生”任何按键),我想知道是否有任何方法可以做到这一点,这比用 a 替换主 Curses 循环更好非阻塞getch()并调用keyboard_leds()函数来读取当前状态。
例如:我可以在初始化curses后启动一个新线程,将其stdscr屏幕作为参数传递,并且该线程将为按键事件注册一个回调函数(例如,special_keypress())NUMLOCK。因此,该函数只会keyboard_leds()在需要时调用,然后更新stdscr。
我不确定这是否可行,而且我知道我可能必须深入研究一些依赖于体系结构的东西(内核/X11等),所以如果跨平台解决方案不可能,那么我对只使用 Linux 的系统很满意。
好吧,这就像用蒸汽锤敲坚果(特别是如果你正在创建一个类似 CLI 的 Rogue 游戏),但是 Pyglet 在 OS X 中至少可以按下 NUMLOCK 按键。我无法让它与任何一个或任何一个一起CAPSLOCK工作SCROLLLOCK,但我的系统热键几乎以各种可能的方式被覆盖,所以可能只是我。
您可以尝试测试它是否更适合您,然后看看 Pyglet 如何检测这些键。
import pyglet
from pyglet.window import key
window = pyglet.window.Window()
@window.event
def on_key_press(symbol, modifiers):
if symbol == key.NUMLOCK:
print 'NumLock was pressed, yay!'
elif symbol == key.CAPSLOCK:
print 'CapsLock was pressed, yay!'
elif symbol == key.SCROLLLOCK:
print 'ScrollLock was pressed, yay!'
@window.event
def on_draw():
window.clear()
if __name__ == '__main__':
pyglet.app.run()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2513 次 |
| 最近记录: |