python的curses模块使用

本文介绍了Python的curses模块,用于实现终端无关的控制台输出和输入处理。curses支持多种终端,如VT100、LINUX控制台和X11终端。由于curses不支持Windows,文章提到了非官方的curses包解决方案。此外,Python的curses模块简化了C语言接口,提供了一个统一的addstr函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考: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()




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值