4

有一个简单的程序:

import curses
import time

window = curses.initscr()

curses.cbreak()
window.nodelay(True)

while True:
    key = window.getch()
    if key != -1:
        print key
    time.sleep(0.01)


curses.endwin()

如何打开不忽略标准 Enter、Backspace 和箭头键功能的模式?或者唯一的方法是将所有特殊字符添加到elif:

if event == curses.KEY_DOWN:
    #key down function

我正在尝试模式curses.raw()和其他模式,但没有效果......如果可以,请添加示例。

4

2 回答 2

1

这是一个允许您保留退格的示例(请记住退格的 ASCII 代码是 127):

import curses
import time

window = curses.initscr()

curses.cbreak()
window.nodelay(True)
# Uncomment if you don't want to see the character you enter
# curses.noecho()
while True:
    key = window.getch()
    try:
        if key not in [-1, 127]:
           print key
    except KeyboardInterrupt:
        curses.echo()
        curses.nocbreak() # Reset the program, so the prompt isn't messed up afterwards
        curses.endwin()
        raise SystemExit
    finally:
        try:
            time.sleep(0.01)
        except KeyboardInterrupt:
            curses.echo()
            curses.nocbreak() # Reset the program, so the prompt isn't messed up afterwards
            curses.endwin()
            raise SystemExit
        finally:
            pass

忽略打印​​ 127 (key not in [-1, 127]ASCII DEL)或 -1(错误)。您可以在其中添加其他项目,以获取其他字符代码。

try/except/finally 用于处理 Ctrl-C。这会重置终端,因此您在运行时不会得到奇怪的提示输出。
这是官方 Python 文档的链接,供将来参考:
https

://docs.python.org/2.7/library/curses.html#module-curses 我希望这会有所帮助。

于 2015-04-01T19:46:09.907 回答
1

stackoverflow.com/a/58886107/9028532 中的代码允许您轻松使用任何键码!
https://stackoverflow.com/a/58886107/9028532

它表明它不会忽略标准的 ENTER、Backspace 或箭头键。getch()工作正常。但也许操作系统会在getch()自己获得机会之前捕获一些键。这通常在操作系统中在某种程度上是可配置的。

于 2019-11-15T23:58:56.850 回答