实现效果如下图,在console的上部分显示输入的内容,下部分用于输入:
虽然比较粗糙,但是一般的功能勉强可用了
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
#!/usr/bin/env python import curses import curses.textpad stdscr = curses.initscr() #通过string来存储输入的内容,每次换行后显示 words = '' def mywin(): global words #创建两个win窗口,stdwin用来输入,stdwin2用来输出 #newwin(行数,列数,y坐标,x坐标) stdwin = curses.newwin(1,curses.COLS,curses.LINES-1,0) stdwin2 = curses.newwin(1000, curses.COLS, 0, 0) lines = 0 while True: stdwin.addstr('>') stdwin.refresh() while True: k = stdwin.getkey() if k != '\n': words += k else: stdwin2.addstr(words + '\n') stdwin2.refresh() lines += int(len(words) / curses.COLS) + 1 if lines >= curses.LINES-2: stdwin2.clear() lines = int(len(words) / curses.COLS) + 1 words='' stdwin.clear() break try: mywin() except Exception: raise Exception finally: curses.endwin() |
已知问题:
1.输入后不能使用backspace或者delete进行删除,方向键等功能键也会被直接识别为键值,而不是执行对应的功能(删除可以用Ctrl+Backspace,但是屏幕不会刷新被删除的内容)
2.输出窗口的行数设置为1000,在超出之后或许会发生addstr异常