检测特殊按键(Alt,Ctrl,F1等)

时间:2015-07-29 11:29:59

标签: ubuntu python-3.x

如何在Python 3.4.3 Ubuntu控制台中捕获特殊按键? 我发现了这个:

import tty, sys, termios, select
def setup_term(fd, when=termios.TCSAFLUSH):
    mode = termios.tcgetattr(fd)
    mode[tty.LFLAG] = mode[tty.LFLAG] & ~(termios.ECHO | TERMIOS.ICANON)
    termios.tcsetattr(fd, when, mode)
def getch(timeout=None):
    fd = sys.stdin.fileno()
    old_settings = termios.tcgetattr(fd)
    try:
        setup_term(fd)
        try:
            rw, wl, xl = select.select([fd],[],[],timeout)
        except select.error:
            return
        if rw:
            return sys.stdin.read(1)
    finally:
        termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)

但它没有检测到按下F1,Alt,Ctrl等 如果可能,我想不添加任何包裹。

抱歉我的英文

1 个答案:

答案 0 :(得分:1)

如果要构建文本用户界面,使用curses模块可能会对您有所帮助。此示例为每个按下的键打印一个键代码:

import curses

def main(stdscr):
    curses.noecho()
    curses.cbreak()
    stdscr.keypad(1)
    while True:
        keycode=stdscr.getch()
        stdscr.addstr("%i\n" % keycode)
        stdscr.refresh()

curses.wrapper(main)

对于F1,输入或箭头键等特殊键,请将键码与curses.KEY_F1之类的常量进行比较:https://docs.python.org/3/library/curses.html#constants

您将无法捕捉某些修改键,例如alt或control。常规终端无法做到这一点,请参阅How to get CTRL, Shift or Alt with getch() ncurses?