参考:http://docs.python.org/2/howto/curses.html
curses(早期名称,现在是ncurses)包的封装,用于实现终端无关的控制台输出以及输入处理。curses包支持各种终端,从古老的VT100到LINUX控制台到X11终端如xterm或rxvt。curses把终端当作一个矩阵,即单元格的集合,每一个ascii字符代表最小的char-cell。注意curses是不支持windows平台的,不过这里 http://www.lfd.uci.edu/~gohlke/pythonlibs/#curses 有一个非正式curses包可以尝试,另外windows平台可以使用Console模块。
python的curses模块是对curses包的C语言的简单封装,并对curses的调用做了简化,将C接口中的addstr, mvaddstr, mvwaddstr三个函数合并成了一个单独的addstr函数。
以下是一个简单的例子:
import curses
stdscr = curses.initscr()
def display_info(str, x, y, colorpair=1):
'''使用指定的colorpair显示文字'''
global stdscr
stdscr.addstr(y, x, str, curses.color_pair(colorpair))
stdscr.refresh()
def get_ch_and_continue():
'''演示press any key to continue'''
global stdscr
#设置nodelay,为0时会变成阻塞式等待
stdscr.nodelay(0)
#输入一个字符
ch=stdscr.getch()
#重置nodelay,使得控制台可以以非阻塞的方式接受控制台输入,超时1秒
stdscr.nodelay(1)
return True
def set_win():
'''控制台设置'''
global stdscr
#使用颜色首先需要调用这个方法
curses.start_color()
#文字和背景色设置,设置了两个color pair,分别为1和2
curses.init_pair(1, curses.COLOR_GREEN, curses.COLOR_BLACK)
curses.init_pair(2, curses.COLOR_RED, curses.COLOR_BLACK)
#关闭屏幕回显
curses.noecho()
#输入时不需要回车确认
curses.cbreak()
#设置nodelay,使得控制台可以以非阻塞的方式接受控制台输入,超时1秒
stdscr.nodelay(1)
def unset_win():
'''控制台重置'''
global stdscr
#恢复控制台默认设置(若不恢复,会导致即使程序结束退出了,控制台仍然是没有回显的)
curses.nocbreak()
curses.echo()
#结束窗口
curses.endwin()
if __name__=='__main__':
try:
set_win()
display_info('Hola, curses!')
display_info('Press any key to continue...')
get_ch_and_continue()
except Exception,e:
raise e
finally:
unset_win()