当我使用

ch = wnd.getch()


在Python下的curses中,我可以捕获wnd.getch返回10的回车键。但是,当我用getch替换get_wch时,它不起作用。 get_wch有什么问题吗?

最佳答案

函数getchget_wch具有不同的接口:


getch返回一个字符
get_wch返回状态码,并通过作为参数传递的指针设置宽字符。


它们使用不同的接口,因为特殊键(例如KEY_HOME)可以用getch作为超出“正常”(8位)字符范围的“额外”字符来处理。您不能使用宽字符来做到这一点(不容易,因为宽字符范围的结尾不太明确),因此get_wch使用状态代码来判断它通过指针设置的值是宽字符还是特殊键。

尽管手册页足够清晰,但是当将功能添加到curses包装器时,python开发人员并未注意到这一区别。 Python文档中的描述对应于getch而不是get_wch


Issues #15785: curses.get_wch() returns keypad codes incorrectly

错误报告表明已对python 3.4进行了修复。
16.10. curses — Terminal handling for character-cell displays
window.get_wch([y, x])



  变得宽容。对于大多数键,返回一个字符,对于功能键,小键盘键和其他特殊键,返回一个整数。
  
  版本3.3中的新功能。


进一步阅读:


getch, wgetch, mvgetch, mvwgetch, ungetch, has_key - get (or push back) characters from curses terminal keyboard
get_wch, wget_wch, mvget_wch, mvwget_wch, unget_wch - get (or push back) a wide character from curses terminal keyboard

关于python - 如何使Python get_wch捕获Enter键?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19191837/

10-12 22:20