curses
在版本1.6中进行了更改:添加了对ncurses
库的支持并转换为包。
curses
模块为curses库提供了一个接口,这是用于便携式高级终端处理的事实标准。
虽然curses在Unix环境中应用最广泛,但DOS,OS/2以及其他可能的系统都可以使用这些版本。此扩展模块旨在匹配ncurses的API,Linux上的开源curses库和Unix的BSD变体。
注意
从版本5.4开始,ncurses库决定如何使用nl_langinfo
函数解释非ASCII数据。这意味着您必须调用locale.setlocale()
应用程序并使用系统的可用编码之一对Unicode字符串进行编码。本例使用系统的默认编码:
import locale
locale.setlocale(locale.LC_ALL, '')
code = locale.getpreferredencoding()
然后使用代码作为str.encode()
调用的编码。
另请参阅
Module
curses.ascii
与ASCII字符一起工作的实用程序,无论您的区域设置如何。 Module
curses.panel
面板堆栈扩展,为curses窗口添加深度。 Module
curses.textpad
用于支持类Emacs绑定的curses的可编辑文本小部件。使用Python进行Curses编程使用由Andrew Kuchling和Eric Raymond 编写的Python使用curses的教程材料。
Python源代码发行版中的Demo/curses/目录包含一些使用此模块提供的curses绑定的示例程序。
1. 函数
curses
模块定义了以下例外情况:
exception curses.error
当curses库函数返回错误时引发异常。
注意
只要函数或方法的x或y参数是可选的,它们就默认为当前的光标位置。每当attr是可选的,它默认为A_NORMAL
。
该模块curses
定义了以下功能:
curses.baudrate()
以每秒位数的速度返回终端的输出速度。在软件终端仿真器上,它将具有固定的高价值。由于历史原因,在过去,它被用来编写时间延迟的输出回路,偶尔也会根据线路速度改变接口。
curses.beep()
发出短暂的注意声音。
curses.can_change_color()
根据程序员是否可以更改终端显示的颜色返回True
或返回False
。
curses.cbreak()
进入cbreak模式。在cbreak模式下(有时称为“罕见”模式),关闭正常的tty行缓存,并可逐个读取字符。但是,与原始模式不同,特殊字符(中断,退出,暂停和流量控制)保留其对tty驱动程序和调用程序的影响。首先呼叫raw()
然后cbreak()
以终止模式离开终端。
curses.color_content(color_number)
返回颜色color_number中红色,绿色和蓝色(RGB)分量的强度,颜色颜色编号必须介于0
和之间COLORS
。返回一个三元组,其中包含给定颜色的R,G,B值,该值位于0
(无分量)和1000
(分量的最大量)之间。
curses.color_pair(color_number)
以指定的颜色返回显示文本的属性值。该属性值可以结合A_STANDOUT
,A_REVERSE
以及其他A_*
属性。pair_number()
是这个函数的对应部分。
curses.curs_set(visibility)
设置光标状态。可见性可以设置为0,1或2,因为不可见,正常或非常明显。如果终端支持请求的可见性,则返回前一个光标状态; 否则会引发异常。在许多终端上,“可见”模式是下划线光标,“非常明显”模式是块光标。
curses.def_prog_mode()
将当前终端模式保存为“程序”模式,即运行程序使用curses时的模式。(它的副本是“shell”模式,当程序不在curses时)。随后的调用reset_prog_mode()
将恢复这种模式。
curses.def_shell_mode()
将当前终端模式保存为“外壳”模式,即运行程序不使用curses时的模式。(当程序使用curses功能时,它的对应是“程序”模式。)随后的调用reset_shell_mode()
将恢复此模式。
curses.delay_output(ms)
在输出中插入ms毫秒暂停。
curses.doupdate()
更新物理屏幕。curses库保留两个数据结构,一个表示当前的物理屏幕内容,一个虚拟屏幕表示所需的下一个状态。该doupdate()
地更新物理屏幕相匹配的虚拟屏幕。
在noutrefresh()
诸如addstr()
已经在窗口上执行的写入操作之后,可以通过调用来更新虚拟屏幕。正常的refresh()
调用只是noutrefresh()
紧随其后doupdate()
; 如果您必须更新多个窗口,则可以通过noutrefresh()
在所有窗口上发出调用,然后单个调用,来加速性能并降低屏幕闪烁doupdate()
。
curses.echo()
进入回声模式。在回显模式下,每输入一个字符,它都会回显到屏幕上。
curses.endwin()
取消初始化库,并将终端返回到正常状态。
curses.erasechar()
返回用户当前的擦除字符。在Unix操作系统下,这是curses程序的控制tty的一个属性,并不是由curses库本身设置的。
curses.filter()
filter()
如果使用该例程,则必须在调用之前initscr()
调用该例程。其效果是,在这些调用中,LINES
设置为1; cup, cud, cud1, cuu1, cuu, vpa被禁用;并且主字符串被设置为cr的值。其效果是光标限制在当前行,屏幕更新也是如此。这可以用于在不触摸屏幕的其余部分的情况下启用一次一个字符的行编辑。
curses.flash()
闪烁屏幕。也就是说,将其改为反向视频,然后在短时间内将其改回。有些人更喜欢诸如“可见的钟声”来发出的可听见的注意力信号beep()
。
curses.flushinp()
刷新所有输入缓冲区。这抛弃了用户键入并且尚未被程序处理的任何类型的头文件。
curses.getmouse()
在getch()
返回KEY_MOUSE
信号指示鼠标事件后,应该调用此方法来检索排队的鼠标事件,表示为5元组(id, x, y, z, bstate)
。id是用于区分多个设备的ID值,x,y,z是事件的坐标。(z当前未被使用。)bstate是一个整数值,其位将被设置为指示事件的类型,并且将是以下一个或多个常量的按位或运算,其中n是从1到4的按钮编号:BUTTONn_PRESSED
,BUTTONn_RELEASED
,BUTTONn_CLICKED
,BUTTONn_DOUBLE_CLICKED
,BUTTONn_TRIPLE_CLICKED
,BUTTON_SHIFT
,BUTTON_CTRL
,BUTTON_ALT
。
curses.getsyx()
返回y和x中虚拟屏幕光标的当前坐标。如果leaveok当前为真,则返回-1,-1。
curses.getwin(file)
通过先前的putwin()
呼叫读取存储在文件中的窗口相关数据。例程然后使用该数据创建并初始化新窗口,返回新的窗口对象。
curses.has_colors()
如果终端可以显示颜色,则返回True
;否则,返回False
。
curses.has_ic()
返回True
如果终端有镶片和删除字符的能力。此功能仅出于历史原因,因为所有现代软件终端仿真器都具有此功能。
curses.has_il()
如果终端具有插入和删除行功能,或者可以使用滚动区域模拟它们,则返回True
。此功能仅出于历史原因,因为所有现代软件终端仿真器都具有此功能。
curses.has_key(ch)
取一个关键值ch,如果当前终端类型识别出具有该值的关键字,则返回True
。
curses.halfdelay(tenths)
用于半延时模式,类似于Cbreak模式,因为用户键入的字符可立即用于程序。但是,在十分之一秒内阻塞之后,如果没有输入任何内容,则会引发异常。十分之一的值必须是介于1
和之间的数字255
。使用nocbreak()
留下半延迟模式。
curses.init_color(color_number, r, g, b)
改变颜色的定义,取出要改变的颜色的数字,后面跟着三个RGB值(红色,绿色和蓝色成分的数量)。color_number的值必须介于0
和之间COLORS
。r,g,b中的每一个都必须是介于0
和之间的值1000
。当init_color()
使用时,屏幕上出现的所有颜色立即变为新的定义。此功能在大多数终端上不可用; 只有在can_change_color()
退货时才有效1
。
curses.init_pair(pair_number, fg, bg)
更改颜色对的定义。它有三个参数:要更改的颜色对的编号,前景颜色编号和背景颜色编号。pair_number的值必须在1
和之间COLOR_PAIRS - 1
(0
颜色对以黑色连线为白色,不能更改)。fg和bg参数的值必须介于0
和之间COLORS
。如果颜色对先前已初始化,则刷新屏幕并将该颜色对的所有出现更改为新定义。
curses.initscr()
初始化库。返回一个WindowObject
代表整个屏幕的代码。
注意
如果在打开终端时出现错误,则底层curses库可能会导致解释器退出。
curses.is_term_resized(nlines, ncols)
如果resize_term()
将修改窗口结构,则返回True
,否则返回False
。
curses.isendwin()
返回True
,如果endwin()
已被调用(即,curses库已被初始化)。
curses.keyname(k)
返回编号为k的键的名称。生成可打印ASCII字符的键的名称是键的字符。控制键组合的名称是一个由字符组成的双字符字符串,后跟相应的可打印ASCII字符。alt-key组合的名称(128-255)是由前缀'M-'组成的字符串,后跟相应的ASCII字符的名称。
curses.killchar()
返回用户的当前行杀死字符。在Unix操作系统下,这是curses程序的控制tty的一个属性,并不是由curses库本身设置的。
curses.longname()
返回一个字符串,其中包含描述当前终端的terminfo长名称字段。详细描述的最大长度是128个字符。它只在调用之后被定义initscr()
。
curses.meta(yes)
如果是 1,则允许输入8位字符。如果是 0,则只允许7位字符。
curses.mouseinterval(interval)
设置按下和释放事件之间可以经过的最大时间(以毫秒为单位),以便将它们识别为点击,并返回上一个间隔值。默认值是200毫秒,或五分之一秒。
curses.mousemask(mousemask)
设置要报告的鼠标事件,并返回一个元组(availmask, oldmask)
。availmask指示可以报告哪些指定的鼠标事件; 在完全失败时返回0. oldmask是给定窗口的鼠标事件掩码的前一个值。如果从未调用此函数,则不会报告任何鼠标事件。
curses.napms(ms)
睡眠毫秒毫秒。
curses.newpad(nlines, ncols)
创建并返回指向具有给定行数和列数的新Pad数据结构的指针。垫子作为窗口对象返回。
衬垫就像一个窗口,除了它不受屏幕大小的限制,并且不一定与屏幕的特定部分相关联。当需要大窗口时,可以使用焊盘,并且一次只能在屏幕上显示一部分窗口。自动刷新垫(例如从滚动或回显输入)不会发生。的refresh()
和noutrefresh()
一个垫的方法要求6个参数指定要显示的垫的一部分,并用于在显示屏幕上的位置。参数是pminrow,pmincol,sminrow,smincol,smaxrow,smaxcol ; 该p参数指的是要显示的填充区域的左上角,并且s参数在屏幕上定义了一个剪贴框,在该屏幕内将显示填充区域。
curses.newwin(nlines, ncols)curses.newwin(nlines, ncols, begin_y, begin_x)
返回一个新的窗口,其左上角在(begin_y, begin_x)
,其高度/宽度为nlines/ncols。
默认情况下,窗口将从指定位置延伸到屏幕的右下角。
curses.nl()
进入换行模式。此模式将返回键转换为输入的换行符,并将换行符转换为输出的回车符和换行符。换行模式最初处于打开状态。
curses.nocbreak()
离开cbreak模式。使用线路缓冲恢复到正常的“cooked”模式。
curses.noecho()
留下回声模式。输入字符的回显被关闭。
curses.nonl()
离开换行模式。在输入时禁止将换行转换为换行符,并禁止将换行符的低级转换转换为换行符/返回输出(但这不会改变其行为addch('\n')
,它总是等同于虚拟屏幕上的返回和换行符)。通过翻译,诅咒有时可以加快垂直运动的速度; 此外,它将能够检测输入上的返回键。
curses.noqiflush()
使用noqiflush()
例程时,与INTR,QUIT和SUSP字符相关的输入和输出队列的正常刷新将不会执行。noqiflush()
如果您希望输出在处理程序退出后继续执行,就好像中断没有发生一样,您可能需要调用信号处理程序。
curses.noraw()
保持原始模式。使用线路缓冲恢复到正常的“cooked”模式。
curses.pair_content(pair_number)
返回(fg, bg)
包含请求颜色对的颜色的元组。pair_number的值必须介于1
和之间COLOR_PAIRS - 1
。
curses.pair_number(attr)
返回由属性值attr设置的颜色对的编号。color_pair()
是这个函数的对应部分。
curses.putp(string)
相当于tputs(str, 1, putchar)
; 为当前终端发出指定terminfo能力的值。请注意,putp()
总是输出到标准输出。
curses.qiflush([flag])
如果标志是False
,则效果与调用相同noqiflush()
。如果标志是True
或者没有提供参数,当这些控制字符被读取时,队列将被刷新。
curses.raw()
进入原始模式。在原始模式下,中断,退出,暂停和流量控制键的正常线路缓冲和处理被关闭; 字符会逐个呈现给curses输入函数。
curses.reset_prog_mode()
如之前保存的那样,将终端恢复到“program”模式def_prog_mode()
。
curses.reset_shell_mode()
如之前保存的,将终端恢复到“shell”模式def_shell_mode()
。
curses.resetty()
将终端模式的状态恢复到上次调用时的状态savetty()
。
curses.resize_term(nlines, ncols)
使用后端功能resizeterm()
,执行大部分工作;在调整窗口大小时,resize_term()
空白填充扩展的区域。调用应用程序应该用适当的数据填写这些区域。该resize_term()
函数尝试调整所有窗口的大小。但是,由于打击垫的调用惯例,不可能在没有与应用程序进行额外交互的情况下调整这些大小。
curses.resizeterm(nlines, ncols)
将标准窗口和当前窗口调整为指定尺寸,并调整由记录窗口尺寸的curses库(特别是SIGWINCH处理程序)使用的其他簿记数据。
curses.savetty()
将终端模式的当前状态保存在缓冲区中,可用于resetty()
。
curses.setsyx(y, x)
将虚拟屏幕光标设置为y,x。如果y和x都是-1,则设置leaveok。
curses.setupterm([termstr, fd])
初始化终端。termstr是给出终端名称的字符串; 如果省略,TERM
将使用环境变量的值。fd是任何初始化序列将被发送到的文件描述符;如果未提供,sys.stdout
则将使用文件描述符for 。
curses.start_color()
如果程序员想要使用颜色,并且在任何其他颜色操作例程被调用之前必须被调用。之后立即调用这个例程是一个好习惯initscr()
。
start_color()
初始化模块中的八种基本颜色(黑色,红色,绿色,黄色,蓝色,品红色,青色和白色)以及两个全局变量curses
,COLORS
并且COLOR_PAIRS
包含终端可以支持的最大颜色和颜色对数。它还将终端上的颜色恢复到刚刚打开终端时的值。
curses.termattrs()
返回终端支持的所有视频属性的逻辑OR。当诅咒程序需要完全控制屏幕外观时,此信息非常有用。
curses.termname()
返回环境变量的值TERM
,截断为14个字符。
curses.tigetflag(capname)
返回与terminfo能力名称capname相对应的布尔能力的值。-1
如果capname不是布尔功能,或者0
终端描述中已取消或不存在,则返回该值。
curses.tigetnum(capname)
返回与terminfo能力名称capname相对应的数字能力的值。-2
如果capname不是数字能力,或者-1
终端描述中被取消或缺失,则返回该值。
curses.tigetstr(capname)
返回与terminfo能力名称capname相对应的字符串能力的值。如果capname不是字符串能力,或者在终端描述中被取消或缺失,则返回None
。
curses.tparm(str[, ...])
使用提供的参数实例化字符串str,其中str应该是从terminfo数据库获得的参数化字符串。例如tparm(tigetstr("cup"), 5, 3)
可能会导致'\033[6;4H'
,确切的结果取决于终端类型。
curses.typeahead(fd)
指定文件描述符fd用于键入检查。如果fd是-1
,则不会进行事先检查。
curses库通过在更新屏幕时定期查找typeahead来进行“line-breakout优化”。如果找到输入,并且它来自tty,则当前更新将被推迟,直到刷新或再次调用doupdate,从而可以更快地响应事先键入的命令。这个函数允许指定一个不同的文件描述符来进行typehead检查。
curses.unctrl(ch)
返回字符ch的可打印表示形式的字符串。控制字符显示为脱字符,后跟字符,例如as ^C
。打印字符保持原样。
curses.ungetch(ch)
推ch,所以下一个getch()
会返回它。
注意
调用之前只能推送一个chgetch()
。
curses.ungetmouse(id, x, y, z, bstate)
将KEY_MOUSE
事件推入输入队列,将给定的状态数据与它关联。
curses.use_env(flag)
如果使用,应该在调用之前调用此函数initscr()
或调用newterm。当flag是时False
,即使设置了环境变量LINES
和COLUMNS
(默认使用),或者如果curses正在窗口中运行,terminfo数据库中指定的行和列的值也将被使用(在这种情况下,将使用默认行为窗口的大小,如果LINES
并COLUMNS
没有设置)。
curses.use_default_colors()
允许在支持此功能的终端上使用颜色的默认值。使用它来支持应用程序的透明度。默认颜色分配给颜色编号-1。调用此函数后,init_pair(x, curses.COLOR_RED, -1)
例如将颜色对x初始化为默认背景上的红色前景色。
curses.wrapper(func, ...)
初始化诅咒并调用另一个可调用对象func,它应该是您的curses使用应用程序的其余部分。如果应用程序引发异常,则此函数将在重新引发异常并生成回溯之前将终端恢复到正常状态。可调用对象func然后将主窗口'stdscr'作为其第一个参数,然后传递给其他任何参数wrapper()
。在调用func之前,wrapper()
打开cbreak模式,关闭echo,启用终端键盘,如果终端具有颜色支持,则初始化颜色。在退出时(无论是正常还是例外),它将恢复已烹饪模式,打开回音并禁用终端键盘。
2.窗口对象
窗口对象,返回的initscr()
和newwin()
上面,有以下几种方法:
window.addch(ch[, attr])window.addch(y, x, ch[, attr])
注意
字符指C字符(ASCII码),而不是一个Python字符(长度为1的字符串)。(每当文档提到一个字符时,这个注释都是真的)。内置ord()
函数可以方便地将字符串传递给代码。
painter字符CH在(y, x)
与属性ATTR,在该位置覆盖任何字符以前的painter。默认情况下,字符位置和属性是窗口对象的当前设置。
window.addnstr(str, n[, attr])window.addnstr(y, x, str, n[, attr])
最多painterñ字符串的字符STR在(y, x)
与属性ATTR,显示先前覆盖任何东西。
window.addstr(str[, attr])window.addstr(y, x, str[, attr])
paint字符串STR在(y, x)
与属性ATTR,显示先前覆盖任何东西。
window.attroff(attr)
从应用于所有写入当前窗口的“背景”集中删除属性attr。
window.attron(attr)
从应用于所有写入的“背景”集添加属性attr到当前窗口。
window.attrset(attr)
将“背景”属性设置为attr。这个集合最初是0(没有属性)。
window.bkgd(ch[, attr])
将窗口的背景属性设置为字符ch,属性为attr。然后,该更改将应用于该窗口中的每个字符位置:
- 窗口中每个字符的属性都会更改为新的背景属性。
- 无论何处出现前一个背景字符,都会更改为新的背景字符。
window.bkgdset(ch[, attr])
设置窗口的背景。窗口的背景由一个字符和任何属性组合组成。背景的属性部分与写入窗口的所有非空字符组合(OR)。背景的字符和属性部分都与空白字符组合在一起。背景变成字符的属性,并通过任何滚动和插入/删除行/字符操作与字符一起移动。
window.border([ls[, rs[, ts[, bs[, tl[, tr[, bl[, br]]]]]]]])
在窗口的边缘周围绘制边框。每个参数指定用于边框特定部分的字符; 有关更多详细信息,请参阅下表。这些字符可以指定为整数或单字符字符串。
注意
0
任何参数的值都会导致该参数使用默认字符。关键字参数不能使用。该表中列出了默认值:
参数 | 描述 | 默认值 |
---|---|---|
ls | 左边 | ACS_VLINE |
rs | 右边 | ACS_VLINE |
ts | 顶部 | ACS_HLINE |
bs | 底部 | ACS_HLINE |
tl | 左上角 | ACS_ULCORNER |
tr | 右上角 | ACS_URCORNER |
bl | 左下角 | ACS_LLCORNER |
br | 右下角 | ACS_LRCORNER |
window.box([vertch, horch])
类似于border()
,但ls和rs都是垂直的,ts和bs都是霍尔。此功能始终使用默认的角落角色。
window.chgat(attr)window.chgat(num, attr)window.chgat(y, x, attr)window.chgat(y, x, num, attr)
在当前光标位置或位置(如果提供)设置num字符的属性(y, x)
。如果没有的值NUM给出或NUM = -1时,将属性上的所有字符的行的结尾被设置。该功能不移动光标。使用该touchline()
方法将更改已更改的行,以便在下一次窗口刷新时重新显示内容。
window.clear()
像erase()
,但也会导致整个窗口下次调用时重新粉刷refresh()
。
window.clearok(yes)
如果yes是 1,下一个调用refresh()
将完全清除窗口。
window.clrtobot()
从光标擦除到窗口的末尾:删除光标下的所有行,然后执行相应的clrtoeol()
操作。
window.clrtoeol()
从光标擦除到行尾。
window.cursyncup()
更新窗口所有祖先的当前光标位置,以反映窗口的当前光标位置。
window.delch([y, x])
删除任何字符(y, x)
。
window.deleteln()
删除光标下的行。以下所有行都向上移动一行。
window.derwin(begin_y, begin_x)window.derwin(nlines, ncols, begin_y, begin_x)
“derive window”的缩写derwin()
与调用相同subwin()
,只是begin_y和begin_x与窗口的原点相关,而不是相对于整个屏幕。为派生窗口返回一个窗口对象。
window.echochar(ch[, attr])
添加属性attr的字符ch,并立即调用窗口。refresh()
window.enclose(y, x)
测试给定窗口是否包含给定的一对屏幕相对字符单元坐标,返回True
或False
。确定屏幕窗口的哪个子集包含鼠标事件的位置很有用。
window.erase()
清除窗口。
window.getbegyx()
返回(y, x)
左上角的坐标元组。
window.getbkgd()
返回给定窗口的当前character/attribute 对。
window.getch([y, x])
获得一个字符。注意,返回的整数并没有一定要在ASCII范围:功能键,键盘按键等高于256无延迟模式,-1,如果没有输入返回。返回的数字,否则getch()
等待的关键是按下。
window.getkey([y, x])
获取一个字符,返回一个字符串,而不是一个整数,像getch()
这样。功能键,小键盘键等返回包含键名的多字节字符串。在无延迟模式下,如果没有输入,则会引发异常。
window.getmaxyx()
返回(y, x)
窗口高度和宽度的元组。
window.getparyx()
将此窗口的起始坐标相对于其父窗口返回为两个整数变量y和x。如果此窗口没有父项,则返回-1, -1
。
window.getstr([y, x])
从用户读取一个字符串,具有原始的行编辑能力。
window.getyx()
返回(y, x)
当前光标位置相对于窗口左上角的元组。
window.hline(ch, n)window.hline(y, x, ch, n)
显示从字符ch开始的(y, x)
长度为n的水平线。
window.idcok(flag)
如果flag是False
,curses不再考虑使用终端的硬件插入/删除字符特征;如果标志是True
,则启用使用字符插入和删除。当首次初始化curses时,缺省情况下使用字符插入/删除。
window.idlok(yes)
如果调用yes等于1,curses
则会尝试使用硬件行编辑工具。否则,行insertion/deletion被禁用。
window.immedok(flag)
如果flag是True
,窗口图像的任何改变自动导致窗口被刷新; 你不必再打电话给refresh()
自己。但是,由于重复调用wrefresh,它可能会大大降低性能。该选项默认是禁用的。
window.inch([y, x])
返回窗口中给定位置的字符。底部的8位是字符,高位是属性。
window.insch(ch[, attr])window.insch(y, x, ch[, attr])
油漆字符CH在(y, x)
具有属性ATTR,从移动位置的线X由一个字符权。
window.insdelln(nlines)
将nlines行插入当前行上方的指定窗口中。该nlines底线都将丢失。对于负nline,请删除从光标下方开始的nlines行,然后向上移动其余行。底部的nlines线被清除。当前光标位置保持不变。
window.insertln()
在光标下插入一个空行。以下所有行都向下移动一行。
window.insnstr(str, n[, attr])window.insnstr(y, x, str, n[, attr])
在光标下方的字符前面插入一个字符串(可以放在行上的字符数量),最多可包含n个字符。如果n为零或负数,则插入整个字符串。光标右边的所有字符都右移,线上最右边的字符丢失。光标位置不变(如果指定,则移至y,x后)。
window.insstr(str[, attr])window.insstr(y, x, str[, attr])
在光标之下的字符之前插入一个字符串(可以放在行上的字符数量)。光标右边的所有字符都右移,线上最右边的字符丢失。光标位置不变(如果指定,则移至y,x后)。
window.instr([n])window.instr(y, x[, n])
返回从当前光标位置开始的窗口中提取的字符串,如果指定,则返回y,x。属性从角色中剥离。如果指定了n,则instr()
最多返回n个字符的字符串(不包括尾部NUL)。
window.is_linetouched(line)
返回True
如果指定的线路是自最后通话修改refresh()
; 否则返回False
。curses.error
如果行对给定窗口无效,则引发异常。
window.is_wintouched()
返回True
如果指定的窗口是因为在最后一次通话修改refresh()
; 否则返回False
。
window.keypad(yes)
如果yes是 1,则由某些键(键盘,功能键)生成的转义序列将被解释curses
。如果yes是 0,则转义序列将保留在输入流中。
window.leaveok(yes)
如果是 1,则光标保持在更新位置,而不是位于“光标位置”。这样可以尽可能减少光标移动。如果可能的话,光标将变得不可见。
如果yes为0,则更新后光标始终位于“光标位置”。
window.move(new_y, new_x)
将光标移到(new_y, new_x)
。
window.mvderwin(y, x)
将窗口移动到其父窗口中。窗口的屏幕相关参数不会改变。此例程用于在屏幕上相同的物理位置显示父窗口的不同部分。
window.mvwin(new_y, new_x)
移动窗口使其左上角位于(new_y, new_x)
。
window.nodelay(yes)
如果yes是1
,getch()
将是非阻塞的。
window.notimeout(yes)
如果yes是1
,转义序列不会超时。
如果yes是0
,经过几毫秒,转义序列不会被解释,并且将输入流中保持原样。
window.noutrefresh()
标记刷新,但等待。该函数更新代表窗口所需状态的数据结构,但不强制更新物理屏幕。要做到这一点,请调用doupdate()
。
window.overlay(destwin[, sminrow, smincol, dminrow, dmincol, dmaxrow, dmaxcol])
将窗口覆盖在destwin的顶部。窗口不必是相同的大小,只有重叠区域被复制。该副本是非破坏性的,这意味着当前背景字符不会覆盖destwin的旧内容。
要对复制区域进行细化控制,overlay()
可以使用第二种形式。sminrow和smincol是源窗口的左上角坐标,其他变量在目标窗口中标记一个矩形。
window.overwrite(destwin[, sminrow, smincol, dminrow, dmincol, dmaxrow, dmaxcol])
覆盖在destwin之上的窗口。窗口不必是相同的大小,在这种情况下,只有重叠区域被复制。该副本具有破坏性,这意味着当前背景字符将覆盖destwin的旧内容。
要对复制区域进行细化控制,overwrite()
可以使用第二种形式。sminrow和smincol是源窗口的左上角坐标,其他变量标记目标窗口中的矩形。
window.putwin(file)
将与窗口关联的所有数据写入提供的文件对象。这些信息可以在以后使用该getwin()
功能进行检索。
window.redrawln(beg, num)
表明NUM屏线,开始行beg,被损坏,应在下一次完全重绘refresh()
调用。
window.redrawwin()
触摸整个窗口,使其在下次refresh()
调用时完全重新绘制。
window.refresh([pminrow, pmincol, sminrow, smincol, smaxrow, smaxcol])
立即更新显示(与以前的绘图/删除方法同步实际屏幕)。
这6个可选参数只能在窗口是使用创建的打击垫时指定newpad()
。需要额外的参数来指示包含垫和屏幕的部分。pminrow和pmincol指定矩形的左上角显示在打击垫中。sminrow,smincol,smaxrow和smaxcol指定要在屏幕上显示的矩形的边缘。由于矩形必须具有相同的大小,因此要在屏幕中显示的矩形的右下角是从屏幕坐标计算出来的。两个矩形必须完全包含在它们各自的结构中。的负值pminrow,pmincol,sminrow或smincol被视为零。
window.resize(nlines, ncols)
为curses窗口重新分配存储以将其大小调整为指定的值。如果任何一个维度大于当前值,则窗口的数据将填充具有当前背景再现(如设置bkgdset()
)的空白。
window.scroll([lines=1])
通过线条向上滚动屏幕或滚动区域。
window.scrollok(flag)
控制当窗口的光标离开窗口边界或滚动区域时发生的情况,或者是作为底线上的换行动作的结果,或者是输入最后一行的最后一个字符。如果标志为假,则光标留在最后一行。如果标志为真,则窗口向上滚动一行。请注意,为了获得终端的物理滚动效果,还需要调用idlok()
。
window.setscrreg(top, bottom)
将滚动区域从行top设置到行bottom。所有滚动操作都将在该地区进行。
window.standend()
关闭突出特性。在某些终端上,这具有关闭所有属性的副作用。
window.standout()
打开属性A_STANDOUT。
window.subpad(begin_y, begin_x)window.subpad(nlines, ncols, begin_y, begin_x)
返回一个子窗口,其左上角在(begin_y, begin_x)
,width/height为ncols/nlines。
window.subwin(begin_y, begin_x)window.subwin(nlines, ncols, begin_y, begin_x)
返回一个子窗口,其左上角在(begin_y, begin_x)
,width/height为ncols/nlines。
默认情况下,子窗口将从指定位置延伸到窗口的右下角。
window.syncdown()
触摸在任何祖先窗口中被触摸的窗口中的每个位置。这个例程被调用refresh()
,所以几乎不需要手动调用。
window.syncok(flag)
如果用flag设置为True
,则syncup()
在窗口发生变化时自动调用。
window.syncup()
触摸窗口中已更改的窗口祖先中的所有位置。
window.timeout(delay)
为窗口设置阻止或非阻止读取行为。如果delay为负,则使用阻塞读取(将无限期等待输入)。如果延迟为零,则使用非阻塞式读取,getch()
如果没有输入正在等待,则返回-1 。如果延迟为正,getch()
则将阻塞delay毫秒,如果在该时间结束时仍然没有输入,则返回-1。
window.touchline(start, count[, changed])
假装行数已经改变,从行开始。如果提供更改,则指定受影响的行是否标记为已更改(更改 = 1)或未更改(更改 = 0)。
window.touchwin()
为了绘制优化目的,假设整个窗口已经被更改。
window.untouchwin()
自上次调用以来,将窗口中的所有行标记为未更改refresh()
。
window.vline(ch, n)window.vline(y, x, ch, n)
显示从字符ch开始的(y, x)
长度为n的垂直线。
3. 常量
curses
模块定义了以下数据成员:
curses.ERR
一些curses例程返回一个整数,例如getch()
,失败时返回ERR
。
curses.OK
一些curses例程返回一个整数,例如napms()
,成功时返回OK
。
curses.version
代表模块当前版本的字符串。也可以作为__version__
。
有几个常量可用于指定字符单元属性:
属性 | 含义 |
---|---|
A_ALTCHARSET | 备用字符集模式。 |
A_BLINK | 闪烁模式。 |
A_BOLD | 粗体模式。 |
A_DIM | 暗淡模式。 |
A_NORMAL | 普通属性。 |
A_REVERSE | 反向背景和前景色。 |
A_STANDOUT | 突出模式。 |
A_UNDERLINE | 下划线模式。 |
键由以名称开头的整数常量引用KEY_
。可用的确切键帽取决于系统。
关键常数 | 键 |
---|---|
KEY_MIN | 最小键值 |
KEY_BREAK | 断开键(不可靠) |
KEY_DOWN | 向下箭头 |
KEY_UP | 向上箭头 |
KEY_LEFT | 左箭头 |
KEY_RIGHT | 右箭头 |
KEY_HOME | 主页键(向上+左箭头) |
KEY_BACKSPACE | 退格(不可靠) |
KEY_F0 | 功能键。最多支持64个功能键。 |
KEY_Fn | 功能键的值n |
KEY_DL | 删除线 |
KEY_IL | 插入行 |
KEY_DC | 删除字符 |
KEY_IC | 插入字符或进入插入模式 |
KEY_EIC | 退出插入字符模式 |
KEY_CLEAR | 清除屏幕 |
KEY_EOS | 清除屏幕结束 |
KEY_EOL | 清除到行尾 |
KEY_SF | 向前滚动1行 |
KEY_SR | 向后滚动1行(反向) |
KEY_NPAGE | 下一页 |
KEY_PPAGE | 上一页 |
KEY_STAB | 设置选项卡 |
KEY_CTAB | 清除选项卡 |
KEY_CATAB | 清除所有标签 |
KEY_ENTER | 输入或发送(不可靠) |
KEY_SRESET | 软(部分)重置(不可靠) |
KEY_RESET | 重置或硬重置(不可靠) |
KEY_PRINT | 打印 |
KEY_LL | 首页向下或向下(左下) |
KEY_A1 | 键盘左上角 |
KEY_A3 | 键盘右上方 |
KEY_B2 | 键盘中心 |
KEY_C1 | 键盘左下方 |
KEY_C3 | 键盘右下方 |
KEY_BTAB | 后退标签 |
KEY_BEG | Beg(开始) |
KEY_CANCEL | 取消 |
KEY_CLOSE | 关 |
KEY_COMMAND | 命令(命令) |
KEY_COPY | 复制 |
KEY_CREATE | 创建 |
KEY_END | 结束 |
KEY_EXIT | 出口 |
KEY_FIND | 找 |
KEY_HELP | 帮帮我 |
KEY_MARK | 标记 |
KEY_MESSAGE | 信息 |
KEY_MOVE | 移动 |
KEY_NEXT | 下一个 |
KEY_OPEN | 打开 |
KEY_OPTIONS | 选项 |
KEY_PREVIOUS | 上一个(上一个) |
KEY_REDO | 准备 |
KEY_REFERENCE | 参考(参考) |
KEY_REFRESH | 刷新 |
KEY_REPLACE | 更换 |
KEY_RESTART | 重新开始 |
KEY_RESUME | 恢复 |
KEY_SAVE | 保存 |
KEY_SBEG | Shifted Beg(开始) |
KEY_SCANCEL | 移动取消 |
KEY_SCOMMAND | 转移命令 |
KEY_SCOPY | 转移拷贝 |
KEY_SCREATE | 转移创建 |
KEY_SDC | 转移删除字符 |
KEY_SDL | 移动删除线 |
KEY_SELECT | 选择 |
KEY_SEND | 转移结束 |
KEY_SEOL | 转移清除线 |
KEY_SEXIT | 转移出口 |
KEY_SFIND | 转移查找 |
KEY_SHELP | 转移帮助 |
KEY_SHOME | 转移的家 |
KEY_SIC | 转移输入 |
KEY_SLEFT | 移动左箭头 |
KEY_SMESSAGE | 转移消息 |
KEY_SMOVE | 移动移动 |
KEY_SNEXT | 向下移动 |
KEY_SOPTIONS | 转移选项 |
KEY_SPREVIOUS | 上移 |
KEY_SPRINT | 转移打印 |
KEY_SREDO | 转移重做 |
KEY_SREPLACE | 移位替换 |
KEY_SRIGHT | 移动右箭头 |
KEY_SRSUME | 转移的简历 |
KEY_SSAVE | 转移保存 |
KEY_SSUSPEND | 转移暂停 |
KEY_SUNDO | 移动撤消 |
KEY_SUSPEND | 暂停 |
KEY_UNDO | 解开 |
KEY_MOUSE | 鼠标事件已发生 |
KEY_RESIZE | 终端调整大小事件 |
KEY_MAX | 最大键值 |
上VT100s和他们的软件仿真,如X终端仿真器,通常有至少四个功能键(KEY_F1
,KEY_F2
,KEY_F3
,KEY_F4
)可用,并映射到箭头键KEY_UP
,KEY_DOWN
,KEY_LEFT
和KEY_RIGHT
在明显的方式。如果您的机器具有PC键盘,则可以安全地使用箭头键和十二个功能键(较旧的PC键盘可能只有十个功能键); 此外,以下键盘映射也是标准配置:
键帽 | 常量 |
---|---|
Insert | KEY_IC |
Delete | KEY_DC |
Home | KEY_HOME |
End | KEY_END |
Page Up | KEY_PPAGE |
Page Down | KEY_NPAGE |
下表列出了备用字符集中的字符。这些是从VT100终端继承的,并且通常可用于诸如X终端的软件仿真。当没有图形可用时,curses会回到粗糙的可打印ASCII近似值。
注意
这些只有在initscr()
被调用后才可用。
ACS代码 | 含义 |
---|---|
ACS_BBSS | 右上角的替代名称 |
ACS_BLOCK | 实心方块 |
ACS_BOARD | 董事会的正方形 |
ACS_BSBS | 水平线的替代名称 |
ACS_BSSB | 左上角的替代名称 |
ACS_BSSS | 顶部T恤的替代名称 |
ACS_BTEE | 底部三通 |
ACS_BULLET | 子弹 |
ACS_CKBOARD | 棋盘(点画) |
ACS_DARROW | 指向下的箭头 |
ACS_DEGREE | 学位标志 |
ACS_DIAMOND | 钻石 |
ACS_GEQUAL | 大于或 - 等于对 |
ACS_HLINE | 水平线 |
ACS_LANTERN | 灯笼符号 |
ACS_LARROW | 左箭头 |
ACS_LEQUAL | 低于或相等到 |
ACS_LLCORNER | 左下角 |
ACS_LRCORNER | 右下角 |
ACS_LTEE | 左发球 |
ACS_NEQUAL | 不等号 |
ACS_PI | 字母pi |
ACS_PLMINUS | 加号或减号 |
ACS_PLUS | 大加号 |
ACS_RARROW | 右箭头 |
ACS_RTEE | 正确的发球台 |
ACS_S1 | 扫描线1 |
ACS_S3 | 扫描线3 |
ACS_S7 | 扫描线7 |
ACS_S9 | 扫描线9 |
ACS_SBBS | 右下角的替代名称 |
ACS_SBSB | 垂直线的替代名称 |
ACS_SBSS | 右T恤的替代名称 |
ACS_SSBB | 左下角的替代名称 |
ACS_SSBS | 底部三通的替代名称 |
ACS_SSSB | 左T恤的替代名称 |
ACS_SSSS | 交叉名称或大加号 |
ACS_STERLING | 英镑 |
ACS_TTEE | 顶级球座 |
ACS_UARROW | 向上箭头 |
ACS_ULCORNER | 左上角 |
ACS_URCORNER | 右上角 |
ACS_VLINE | 垂线 |
下表列出了预定义的颜色:
常量 | 颜色 |
---|---|
COLOR_BLACK | 黑色 |
COLOR_BLUE | 蓝色 |
COLOR_CYAN | 青色(浅绿蓝色) |
COLOR_GREEN | 绿色 |
COLOR_MAGENTA | 洋红色(紫红色) |
红色 | 红 |
白颜色 | 白色 |
COLOR_YELLOW | 黄色 |
1.6版新增功能
curses.textpad
模块提供了一个Textbox
处理curses窗口中的基本文本编辑的类,支持类似于Emacs(也是Netscape Navigator,BBedit 6.x,FrameMaker和许多其他程序)的键集。该模块还提供了一个矩形绘图功能,可用于框定文本框或用于其他目的。
curses.textpad
模块定义了以下功能:
curses.textpad.rectangle(win, uly, ulx, lry, lrx)
绘制一个矩形。第一个参数必须是一个窗口对象; 其余的参数是相对于该窗口的坐标。第二个和第三个参数是要绘制的矩形左上角的y和x坐标; 第四个和第五个参数是右下角的y和x坐标。矩形将在终端上使用VT100/IBM PC形式字符进行绘制(包括xterm和大多数其他软件终端仿真器)。否则,它将用ASCII破折号,垂直条和加号绘制。
1.文本框对象
你可以如下实例化一个Textbox
对象:
class curses.textpad.Textbox(win)
返回一个文本框小部件对象。该赢的说法应该是一个诅咒WindowObject
,其中的文本框将被遏制。文本框的编辑光标最初位于包含窗口的左上角,并带有坐标(0, 0)
。实例的stripspaces
标志最初处于打开状态。
Textbox
对象有以下方法:
edit([validator])
这是您通常使用的入口点。它接受编辑键击,直到输入一个终止键击。如果提供验证程序,它必须是一个函数。将按键输入的每个击键作为参数调用; 命令调度是在结果上完成的。此方法以字符串形式返回窗口内容;stripspaces
属性是否影响窗口中的空白。
do_command(ch)
处理单个命令按键。以下是支持的特殊按键:
按键 | 行为 |
---|---|
控制-A | 去窗口的左边缘。 |
控制-B | 光标离开,如果合适的话,包装到上一行。 |
控制-d | 删除光标下的字符。 |
控制-E | 转到右边缘(strippaces off)或行尾(strippaces on)。 |
控制-F | 正确的光标,适当时包装到下一行。 |
控制-G | 终止,返回窗口内容。 |
控制-H | 向后删除字符。 |
控制-J | 终止,如果窗口是1行,否则插入换行符。 |
控制-K | 如果行是空白的,删除它,否则清除行结束。 |
控制-L | 刷新屏幕。 |
控制-N | 光标下来;向下移动一行。 |
Control-O键 | 在光标位置插入空行。 |
控制-P | 光标向上; 向上移动一行。 |
如果光标位于无法移动的边缘,则移动操作不会执行任何操作。在可能的情况下支持以下同义词:
常量 | 按键 |
---|---|
KEY_LEFT | Control-B |
KEY_RIGHT | Control-F |
KEY_UP | Control-P |
KEY_DOWN | Control-N |
KEY_BACKSPACE | Control-h |
所有其他击键都被视为一个命令来插入给定的字符并向右移动(使用换行符)。
gather()
以字符串形式返回窗口内容;stripspaces
成员是否会影响窗口中的空白。
stripspaces
该属性是一个控制窗口中空白解释的标志。打开时,每行上的尾随空白将被忽略; 任何将光标放在尾部空白上的光标移动都会转到该行的末尾,而在收集窗口内容时尾随空白会被剥离。
本文档系腾讯云开发者社区成员共同维护,如有问题请联系 cloudcommunity@tencent.com