当前位置:首页 » Python技术

python的curses模块使用

2013-01-09 15:39 本站整理 浏览(6)
参考: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()