【问题标题】:detect special keypress (Alt,Ctrl,F1,etc.)检测特殊按键(Alt、Ctrl、F1 等)
【发布时间】:2015-07-29 11:29:58
【问题描述】:

如何在 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 和类似键。
如果可能的话,我不想添加任何软件包。

对不起我的英语

【问题讨论】:

    标签: ubuntu python-3.x


    【解决方案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?

    【讨论】:

      猜你喜欢
      • 2012-01-04
      • 1970-01-01
      • 2010-10-22
      • 2012-11-05
      • 1970-01-01
      • 1970-01-01
      • 2017-10-14
      • 2020-01-23
      • 1970-01-01
      相关资源
      最近更新 更多