我想创建打字训练程序。我需要一个可以立即读取并打印用户击中的每个字符的函数-类似于getche()
我尝试使用this module中的getche,但是它不能很好地处理退格键。当我按下退格键时,它会打印^?到控制台,我希望它删除字符。
答案 0 :(得分:1)
docs很清楚。
尝试使用getche
请不要这样做,因为据记录getche()
具有您所说的不想要的行为。
致电getch()
,并根据您的要求承担“回送”或维护显示器的责任。
例如,此代码完成了您想要的:
from getch import getch
def pr(s):
print(s, end='', flush=True)
def get_word():
DELETE = 127 # ASCII code
word = ''
c = ''
while not c.isspace():
c = getch()
if ord(c) == DELETE:
pr('\r' + ' ' * len(word) + '\r')
word = word[:-1]
pr(word)
if c.isprintable():
word += c
pr(c)
print('\n')
return word
答案 1 :(得分:1)
curses documentation page官方的定义是:
curses模块提供了curses库的接口,curses库是便携式高级终端处理的实际标准。
您说过您想编写一个打字训练程序,我认为最好的解决方案是使用curses
库执行此任务。
在UNIX系统上,它带有python的默认安装,并且如果您是针对Windows系统的,我发现windows-curses大大增加了支持。
基本上,您可以从官方文档在this页中找到HOWTO指南。
curses.textpad模块对您应该非常有用。
import curses
from curses import wrapper
from curses.textpad import Textbox, rectangle
def main(stdscr):
stdscr.addstr(0, 0, "Enter IM message: (hit Ctrl-G to send)")
editwin = curses.newwin(5,30, 2,1)
rectangle(stdscr, 1,0, 1+5+1, 1+30+1)
stdscr.refresh()
box = Textbox(editwin)
# Let the user edit until Ctrl-G is struck.
box.edit()
# Get resulting contents
message = box.gather()
print(message)
if __name__ == '__main__':
wrapper(main)
windows-curses
模块的样子您可以使用此库执行许多操作,建议您继续阅读我提供的链接上的文档。