我遇到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('œ')
确实会打印œ
。
答案 0 :(得分:4)
在Python 3.3中添加了window.get_wch
功能。它正确处理所有这些字符。
如果您阅读window.getch
的文档,则会注意到它并不声称支持非ASCII可打印字符。它只是记录它可以处理非ASCII键按下,如功能键或键盘键。
修改强>
使用window.get_wch
时,字符(例如'a'
,'ă'
,'好'
,'\n'
或'\t'
)将作为字符串返回。功能键以整数形式返回(例如265
或274
)。这是一个运行的新示例。尝试使用您要识别的不同键进行播放,以查看其值的返回方式。打印数据的格式为:[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)'