监听键盘按键

绑定键盘事件

实例化一个 KeyListener 对象,通过 bind_key 绑定key

from terminal_layout import *

key_listener = KeyListener()

@key_listener.bind_key(Key.UP)
def _(kl, e):
    print(e)

@key_listener.bind_key(Key.DOWN, 'a', '[0-9]')
def _(kl, e):
    if e.key == 'a':
        print('Press a')
    elif e.key == Key.DOWN:
        print('Press DOWN')
    elif e.key == '0':
        print('Press 0')
    else:
        print('Press 1-9')

def stop(kl, e):
    print('Press', e.key, 'stop!')
    kl.stop()

key_listener.bind_key(Key.ENTER,Key.F1, stop, decorator=False)

key_listener.listen(stop_key=[Key.CTRL_A])

bind_key

bind_key 绑定的key有三种类型:

  • Key的成员变量

  • 正则表达式

  • “any”(任意按键)

其有两种用法,装饰器模式和非装饰器模;

非装饰器模式下,倒数第二个参数为回调的函数,最后一个参数必须是 decorator=False

允许的Key

name

keys

Arrows

UP, DOWN, LEFT, RIGHT

Control+

CTRL_A, CTRL_B, CTRL_D, CTRL_E, CTRL_F, CTRL_X, CTRL_Z

F

F1, F2, F3, F4, F5, F6, F7, F8

Other

ENTER, TAB, BACKSPACE, ESC

注解

不支持绑定 CTRL_C

如果需要绑定 ESC ,记得修改stop_key。

停止监听

有两种方法可以停止监听

  1. 回调函数中调用 stop()

  2. 开启监听时设置 stop_key ,如果不设置默认为 [Key.ESC]

绑定不在列表中的key

bind_key的参数是非常宽松的,因此你可以绑定不在支持列表中的key

from terminal_layout import *
from terminal_layout.readkey.key import KeyInfo

kl = KeyListener()

ctrl_g = KeyInfo('ctrl_g', '\x07')

@kl.bind_key(ctrl_g)
def _(kl, e):
    print('按下 ctrl_g', e)


# or
ctrl_h_code = '\x08'

@kl.bind_key(ctrl_h_code)
def _(kl, e):
    print('按下 ctrl_h', e)


kl.listen()