2

我遇到了图书馆getch()功能的问题。curses假设我们有以下程序:

import curses

def main(stdscr):
    while 1:
        c = stdscr.getch()
        stdscr.addstr(chr(c) + ": " + str(c) + "\n")
curses.wrapper(main)

让我们运行它,然后输入以下字符:a, <backspace>,œ

然后输出是:

a: 97
ć: 263
Å: 197

如您所见,a角色被正确拍摄。然而,其他人不是。我只想得到退格键'\b'和 unicode 字符œ,但我们得到了别的东西。

为什么会getch()这样,我怎样才能得到想要的行为?

编辑:

让我强调一下,这不是打印字符的问题,而是读取字符的问题。即,运行stdscr.addstr('œ')确实打印œ.

4

1 回答 1

4

在 Python 3.3window.get_wch中添加了该函数。它正确处理所有这些字符。

如果您阅读 的文档window.getch,您会注意到它并未声称支持非 ASCII 可打印字符。它只是记录了它可以处理非 ASCII 按键,例如功能键或键盘键。

编辑:

使用 时window.get_wch,字符(例如'a''ă''好''\n''\t')作为字符串返回。功能键以整数形式返回(例如265274)。这是一个要运行的新示例。尝试使用您想要识别的不同键来查看它们的值是如何返回的。打印的数据格式为:[repr]: [type].

def main(stdscr):
    while 1:
        c = stdscr.get_wch()
        stdscr.addstr("%s: %s\n" % (repr(c), type(c)))

这是我输入aœ<enter><backspace>和时得到的结果<F1>

'a': <class 'str'>
'œ': <class 'str'>
'\n': <class 'str'>
'\x7f': <class 'str'>
265: <class 'int'>

如果返回一个整数,您可以通过以下方式找到按下的键的名称curses.keyname

>>> curses.keyname(265)
b'KEY_F(1)'
于 2014-03-04T15:08:38.393 回答