Skip to main content

16.10. curses —字符单元显示的终端处理


curses 模块提供了到curses库的接口,这是用于便携式高级终端处理的事实标准。

虽然curses在Unix环境中使用最广泛,但是版本适用于Windows,DOS和其他可能的系统。此扩展模块旨在匹配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()

然后使用 code 作为 str.encode() 调用的编码。

参见

模块 curses.ascii

用于使用ASCII字符的实用程序,无论您的区域设置如何。

模块 curses.panel

一个面板堆栈扩展,增加了深度来诅咒窗口。

模块 curses.textpad

支持 Emacs -like绑定的curses的可编辑文本小部件。

Python使用Python编程

教程材料关于使用curses与Python,由Andrew Kuchling和Eric Raymond。

Python源代码分发中的 Tools/demo/ 目录包含一些使用此模块提供的curses绑定的示例程序。

16.10.1. 功能

模块 curses 定义了以下异常:

exception curses.error

当curses库函数返回错误时抛出异常。

注解

每当函数或方法的 xy 参数是可选的,它们都默认为当前光标位置。每当 attr 是可选的,它默认为 A_NORMAL

模块 curses 定义以下功能:

curses.baudrate()

以位/秒返回终端的输出速度。在软件终端仿真器上,它将具有固定的高值。包括历史原因;在以前的时间,它被用来写时间延迟的输出循环,偶尔根据线速度改变接口。

curses.beep()

发出短暂的注意声音。

curses.can_change_color()

返回 TrueFalse,取决于程序员是否可以更改终端显示的颜色。

curses.cbreak()

进入cbreak模式。在cbreak模式(有时称为“罕见”模式)下,正常tty行缓冲被关闭,字符可以逐个读取。但是,与原始模式不同,特殊字符(中断,退出,暂停和流控制)保留了对tty驱动程序和调用程序的影响。调用第一个 raw(),然后 cbreak() 在cbreak模式下离开终端。

curses.color_content(color_number)

返回颜色 color_number 中的红色,绿色和蓝色(RGB)分量的强度,它必须在 0COLORS 之间。返回三元组,其包含给定颜色的R,G,B值,其将在 0 (无分量)和 1000 (分量的最大量)之间。

curses.color_pair(color_number)

返回用于以指定颜色显示文本的属性值。此属性值可以与 A_STANDOUTA_REVERSE 和其他 A_* 属性组合。 pair_number() 是这个功能的对应物。

curses.curs_set(visibility)

设置光标状态。 visibility 可以设置为0,1或2,对于不可见,正常或非常可见。如果终端支持所请求的可见性,则返回先前的光标状态;否则,引发异常。在许多终端上,“可见”模式是下划线光标,“非常可见”模式是块光标。

curses.def_prog_mode()

将当前终端模式保存为“程序”模式,正在运行的程序正在使用curses时的模式。 (它的副本是“shell”模式,当程序不在curses中)。后续调用 reset_prog_mode() 将恢复此模式。

curses.def_shell_mode()

保存当前终端模式为“shell”模式,运行程序不使用curses时的模式。 (当程序使用curses功能时,其对应的是“程序”模式。)随后调用 reset_shell_mode() 将恢复此模式。

curses.delay_output(ms)

在输出中插入 ms 毫秒暂停。

curses.doupdate()

更新物理屏幕。 curses库保存两个数据结构,一个表示当前物理屏幕内容,一个虚拟屏幕表示期望的下一个状态。 doupdate() 地面更新物理屏幕以匹配虚拟屏幕。

在对窗口执行了诸如 addstr() 的写入操作之后,可以通过 noutrefresh() 调用来更新虚拟屏幕。正常的 refresh() 调用只是 noutrefresh(),后面是 doupdate();如果您必须更新多个窗口,您可以通过在所有窗口上发出 noutrefresh() 调用,然后单个 doupdate() 来加快性能并可能减少屏幕闪烁。

curses.echo()

进入回声模式。在回音模式下,每个字符输入在输入时都回显到屏幕。

curses.endwin()

取消初始化库,并将终端返回正常状态。

curses.erasechar()

返回用户当前的擦除字符。在Unix操作系统下,这是curses程序的控制tty的属性,而不是由curses库本身设置的。

curses.filter()

如果使用 filter() 例程,则必须在调用 initscr() 之前调用。效果是,在这些调用期间,LINES 设置为1;能力清除,杯,cud,cud1,cuu1,cuu,vpa被禁用;并且归属字符串被设置为cr的值。效果是,光标限制在当前行,屏幕更新也是如此。这可以用于在不触摸屏幕的其余部分的情况下实现一次一行的字符编辑。

curses.flash()

闪烁屏幕。也就是说,将其更改为反转视频,然后在较短的时间间隔内将其更改。有些人喜欢像 beep() 产生的可听警告信号,如“可见铃”。

curses.flushinp()

清除所有输入缓冲区。这将抛弃由用户输入并且尚未被程序处理的任何字体。

curses.getmouse()

getch() 返回 KEY_MOUSE 来发送鼠标事件之后,应该调用此方法来检索排队的鼠标事件,表示为5元组 (id, x, y, z, bstate)id 是用于区分多个设备的ID值,xyz 是事件的坐标。 (z 当前未使用。) bstate 是一个整数值,其位将被设置为指示事件类型,并且将是以下一个或多个常量的按位OR,其中 n 是从1到4的按钮编号: BUTTONn_PRESSEDBUTTONn_RELEASEDBUTTONn_CLICKEDBUTTONn_DOUBLE_CLICKEDBUTTONn_TRIPLE_CLICKEDBUTTON_SHIFTBUTTON_CTRLBUTTON_ALT

curses.getsyx()

返回y和x中虚拟屏幕光标的当前坐标。如果leaveok当前为true,则返回-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模式,用户键入的字符可立即用于程序。但是,在阻塞 tenths 十分之几秒后,如果没有键入任何内容,则会引发异常。 tenths 的值必须是 1255 之间的数字。使用 nocbreak() 离开半延迟模式。

curses.init_color(color_number, r, g, b)

更改颜色的定义,更改要更改的颜色编号,后跟三个RGB值(红色,绿色和蓝色分量的数量)。 color_number 的值必须在 0COLORS 之间。 rgb 中的每一个必须是在 01000 之间的值。当使用 init_color() 时,屏幕上该颜色的所有出现将立即更改为新定义。此功能在大多数终端上是无操作的;它仅在 can_change_color() 返回 1 时有效。

curses.init_pair(pair_number, fg, bg)

更改颜色对的定义。它需要三个参数:要更改的颜色对的编号,前景颜色编号和背景颜色编号。 pair_number 的值必须在 1COLOR_PAIRS - 1 之间(0 颜色对在黑色上连接到白色,不能更改)。 fgbg 参数的值必须在 0COLORS 之间。如果颜色对先前已初始化,则屏幕被刷新,并且该颜色对的所有出现被改变为新的定义。

curses.initscr()

初始化库。返回代表整个屏幕的 WindowObject

注解

如果打开终端时出错,底层curses库可能会导致解释器退出。

curses.is_term_resized(nlines, ncols)

如果 resize_term() 将修改窗口结构,则返回 True,否则返回 False

curses.isendwin()

如果已调用 endwin() (即curses库已取消初始化),则返回 True

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)

如果 yes 为1,则允许输入8位字符。如果 yes 为0,则只允许7位字符。

curses.mouseinterval(interval)

设置在按下和释放事件之间可以经过的最大时间(以毫秒为单位),以便将它们识别为点击,并返回上一个间隔值。默认值为200毫秒,或1/5秒。

curses.mousemask(mousemask)

设置要报告的鼠标事件,并返回一个元组 (availmask, oldmask)availmask 表示可以报告指定的鼠标事件;在完成失败时返回0. oldmask 是给定窗口的鼠标事件掩码的先前值。如果从未调用此函数,则不会报告任何鼠标事件。

curses.napms(ms)

睡眠时间为 ms 毫秒。

curses.newpad(nlines, ncols)

创建并返回指向具有给定数目的行和列的新填充数据结构的指针。垫作为窗口对象返回。

垫像窗户,除了它不受屏幕尺寸的限制,并且不一定与屏幕的特定部分相关联。当需要大窗口时,可以使用焊盘,并且一次只有窗口的一部分在屏幕上。不会发生焊盘的自动刷新(例如来自输入的滚动或回显)。焊盘的 refresh()noutrefresh() 方法需要6个参数来指定要显示的焊盘的部分和用于显示的屏幕上的位置。参数是 pminrowpmincolsminrowsmincolsmaxrowsmaxcolp 参数指的是要显示的焊盘区域的左上角,并且 s 参数定义屏幕上将显示焊盘区域的剪切框。

curses.newwin(nlines, ncols)
curses.newwin(nlines, ncols, begin_y, begin_x)

返回一个新窗口,其左上角在 (begin_y, begin_x),其高/宽为 nlines/ncols

默认情况下,窗口将从指定位置延伸到屏幕的右下角。

curses.nl()

输入换行模式。此模式将返回键翻译为输入上的新行,并将换行符转换为返回和换行输出。换行模式最初开启。

curses.nocbreak()

离开cbreak模式。返回正常“熟”模式,使用线路缓冲。

curses.noecho()

离开回波模式。输入字符的回波被关闭。

curses.nonl()

离开换行模式。禁止将输入转换为换行符,并禁用将换行符低级转换为换行符/输出返回(但这不会更改 addch('\n') 的行为,addch('\n') 总是等效于虚拟屏幕上的返回和换行)。有了翻译,诅咒有时可以加快垂直运动一点;同样,它将能够检测输入上的返回键。

curses.noqiflush()

当使用 noqiflush() 例程时,不会执行与INTR,QUIT和SUSP字符相关联的输入和输出队列的正常刷新。如果希望输出在处理程序退出之后继续,就像中断没有发生一样,您可以在信号处理程序中调用 noqiflush()

curses.noraw()

离开原始模式。返回正常“熟”模式,使用线路缓冲。

curses.pair_content(pair_number)

返回包含所请求颜色对的颜色的元组 (fg, bg)pair_number 的值必须在 1COLOR_PAIRS - 1 之间。

curses.pair_number(attr)

返回由属性值 attr 设置的颜色对的编号。 color_pair() 是这个功能的对应物。

curses.putp(string)

相当于 tputs(str, 1, putchar);发出当前终端的指定terminfo能力的值。注意,putp() 的输出总是转到标准输出。

curses.qiflush([flag])

如果 flagFalse,则效果与调用 noqiflush() 相同。如果 flagTrue 或没有提供参数,队列将在读取这些控制字符时被刷新。

curses.raw()

进入原始模式。在原始模式下,正常线路缓冲和中断,退出,暂停和流控制键的处理被关闭;呈现字符以逐个诅ses输入功能。

curses.reset_prog_mode()

将终端恢复到“程序”模式,如以前由 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)

将虚拟屏幕光标设置为 yx。如果 yx 都为-1,则设置leaveok。

curses.setupterm([termstr, fd])

初始化终端。 termstr 是给出终端名称的字符串;如果省略,将使用 TERM 环境变量的值。 fd 是任何初始化序列将被发送到的文件描述符;如果未提供,将使用 sys.stdout 的文件描述符。

curses.start_color()

如果程序员想要使用颜色,并且在任何其他颜色操作例程被调用之前,必须被调用。在 initscr() 之后立即调用此例程是一个好习惯。

start_color() 初始化八种基本颜色(黑色,红色,绿色,黄色,蓝色,洋红色,青色和白色),以及 curses 模块中的两个全局变量 COLORSCOLOR_PAIRS,包含终端可以最大数量的颜色和颜色对支持。它还将终端上的颜色恢复为终端刚刚打开时的值。

curses.termattrs()

返回终端支持的所有视频属性的逻辑或。当curses程序需要完全控制屏幕外观时,此信息很有用。

curses.termname()

返回环境变量 TERM 的值,截断为14个字符。

curses.tigetflag(capname)

返回与terminfo能力名称 capname 对应的布尔能力的值。如果 capname 不是布尔能力,则返回值 -1,如果终端描述中取消或缺失,则返回 0

curses.tigetnum(capname)

返回与terminfo能力名称 capname 对应的数字能力的值。如果 capname 不是数字能力,则返回值 -2,如果终端描述中取消或缺失,则返回 -1

curses.tigetstr(capname)

返回与terminfo能力名称 capname 对应的字符串能力的值。如果 capname 不是字符串能力,或者从终端描述中被取消或不存在,则返回 None

curses.tparm(str[, ...])

使用提供的参数实例化字符串 str,其中 str 应为从terminfo数据库获取的参数化字符串。例如。 tparm(tigetstr("cup"), 5, 3) 可能导致 b'\033[6;4H',确切的结果取决于终端类型。

curses.typeahead(fd)

指定文件描述符 fd 用于字符串检查。如果 fd-1,则不进行预先检查。

curses库通过在更新屏幕时定期查找typeahead来执行“line-breakout optimization”。如果发现输入并且它来自tty,则当前更新被推迟,直到再次调用refresh或doupdate,从而允许更快地响应提前键入的命令。此函数允许为字体预检查指定不同的文件描述符。

curses.unctrl(ch)

返回一个字符串,它是字符 ch 的可打印表示。控制字符显示为插入符号,后跟字符,例如 ^C。打印字符按原样保留。

curses.ungetch(ch)

推送 ch,以便下一个 getch() 返回它。

注解

在调用 getch() 之前,只能推送一个 ch

curses.update_lines_cols()

更新 LINESCOLS。用于检测手动屏幕调整大小。

3.5 新版功能.

curses.unget_wch(ch)

推送 ch,以便下一个 get_wch() 返回它。

注解

在调用 get_wch() 之前,只能推送一个 ch

3.3 新版功能.

curses.ungetmouse(id, x, y, z, bstate)

KEY_MOUSE 事件推送到输入队列,将给定的状态数据与其相关联。

curses.use_env(flag)

如果使用,应在调用 initscr() 或newterm之前调用此函数。当 flagFalse 时,将使用terminfo数据库中指定的行和列的值,即使设置了环境变量 LINESCOLUMNS (默认使用),或者如果curses正在窗口中运行(在这种情况下,默认行为如果未设置 LINESCOLUMNS,则使用窗口大小)。

curses.use_default_colors()

允许在支持此功能的终端上使用颜色的默认值。使用它来支持应用程序的透明度。默认颜色分配给颜色编号-1。调用此函数后,init_pair(x, curses.COLOR_RED, -1) 将颜色对 x 初始化为默认背景上的红色前景色。

curses.wrapper(func, ...)

初始化curses并调用另一个可调用对象 func,它应该是您使用curses的其余应用程序。如果应用程序引发异常,则此函数将在重新引发异常并生成追溯之前将终端恢复到正常状态。然后将可调用对象 func 作为其第一个参数传递给主窗口’stdscr’,然后传递给 wrapper() 的任何其他参数。在调用 func 之前,wrapper() 打开cbreak模式,关闭echo,启用终端键盘,如果终端有颜色支持,则初始化颜色。在退出时(无论是正常还是异常),它恢复熟食模式,打开回波,并禁用终端键盘。

16.10.2. 窗口对象

initscr()newwin() 返回的窗口对象具有以下方法和属性:

window.addch(ch[, attr])
window.addch(y, x, ch[, attr])

注解

character 表示C字符(ASCII代码),而不是Python字符(长度为1的字符串)。 (每当文档提到一个字符时,此说明是真实的。)内置的 ord() 可以方便地将字符串传送到代码。

(y, x) 处绘制具有属性 attr 的字符 ch,覆盖该位置以前的任何字符。默认情况下,字符位置和属性是窗口对象的当前设置。

window.addnstr(str, n[, attr])
window.addnstr(y, x, str, n[, attr])

使用属性 attr(y, x) 处绘制字符串 str 的至多 n 个字符,覆盖先前在显示器上的任何东西。

window.addstr(str[, attr])
window.addstr(y, x, str[, attr])

使用属性 attr(y, x) 处绘制字符串 str,覆盖先前显示的任何内容。

window.attroff(attr)

从应用于当前窗口的所有写入的“后台”集合中删除属性 attr

window.attron(attr)

从应用于当前窗口的所有写入的“后台”集合中添加属性 attr

window.attrset(attr)

将“背景”属性集设置为 attr。此集合最初为0(无属性)。

window.bkgd(ch[, attr])

将窗口的背景属性设置为字符 ch,其属性为 attr。然后将更改应用于该窗口中的每个字符位置:

  • 窗口中每个字符的属性都将更改为新的背景属性。

  • 无论前一个背景字符出现在哪里,它都会更改为新的背景字符。

window.bkgdset(ch[, attr])

设置窗口的背景。窗口的背景由一个字符和任何属性组合组成。背景的属性部分与写入窗口的所有非空白字符组合(OR’ed)。背景的字符和属性部分都与空白字符组合。背景变成字符的属性,并通过任何滚动和插入/删除行/字符操作与字符一起移动。

window.border([ls[, rs[, ts[, bs[, tl[, tr[, bl[, br]]]]]]]])

在窗口边缘绘制边框。每个参数指定要用于边框的特定部分的字符;有关详细信息,请参阅下表。字符可以指定为整数或单字符字符串。

注解

任何参数的 0 值将导致为该参数使用默认字符。关键字参数可以使用 not。默认值列在此表中:

参数

描述

默认值

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() 类似,但 lsrs 均为 vertchtsbs 均为 horch。默认角字符始终由此函数使用。

window.chgat(attr)
window.chgat(num, attr)
window.chgat(y, x, attr)
window.chgat(y, x, num, attr)

在当前光标位置或在 (y, x) 位置(如果提供)设置 num 字符的属性。如果没有给出 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)

“派生窗口”的缩写,derwin() 与调用 subwin() 相同,除了 begin_ybegin_x 是相对于窗口的原点,而不是相对于整个屏幕。返回派生窗口的窗口对象。

window.echochar(ch[, attr])

添加具有属性 attr 的字符 ch,并立即在窗口上调用 refresh()

window.enclose(y, x)

测试给定的屏幕相对字符单元坐标对是否由给定窗口包围,返回 TrueFalse。它对于确定屏幕窗口的什么子集包围鼠标事件的位置是有用的。

window.encoding

用于编码方法参数(Unicode字符串和字符)的编码。当创建子窗口时,编码属性从父窗口继承,例如使用 window.subwin()。默认情况下,使用区域设置编码(请参阅 locale.getpreferredencoding())。

3.3 新版功能.

window.erase()

清除窗口。

window.getbegyx()

返回左上角坐标的元组 (y, x)

window.getbkgd()

返回给定窗口的当前背景字符/属性对。

window.getch([y, x])

获取一个字符。注意,返回的整数 not 必须在ASCII范围内:功能键,键盘按键等返回高于256的数字。在无延迟模式下,如果没有输入,返回-1,否则 getch() 等待,直到一个键被按下。

window.get_wch([y, x])

获得广泛的性格。返回大多数键的字符,或功能键,键盘键和其他特殊键的整数。

3.3 新版功能.

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)

显示从 (y, x) 开始的水平线,长度 n 由字符 ch 组成。

window.idcok(flag)

如果 flagFalse,curses不再考虑使用终端的硬件插入/删除字符功能;如果 flagTrue,则启用使用字符插入和删除。首次初始化curses时,默认情况下启用字符插入/删除功能。

window.idlok(yes)

如果以 yes 等于1调用,curses 将尝试并使用硬件线编辑设施。否则,禁用线插入/删除。

window.immedok(flag)

如果 flagTrue,窗口图像中的任何更改都会自动导致窗口被刷新;你不再需要自己打电话给 refresh()。然而,它可能会显着降低性能,由于重复调用wrefresh。默认情况下禁用此选项。

window.inch([y, x])

返回窗口中给定位置的字符。底部的8位是正确的字符,高位是属性。

window.insch(ch[, attr])
window.insch(y, x, ch[, attr])

(y, x) 处绘制具有属性 attr 的字符 ch,将位置 x 的线向右移动一个字符。

window.insdelln(nlines)

nlines 行插入当前行上方的指定窗口。 nlines 底线丢失。对于负 nlines,删除从光标下的一行开始的 nlines 行,并向上移动剩余的行。底部 nlines 行被清除。当前光标位置保持不变。

window.insertln()

在光标下插入空白行。所有后面的行都向下移动一行。

window.insnstr(str, n[, attr])
window.insnstr(y, x, str, n[, attr])

在光标下的字符之前插入一个字符串(尽可能多的字符),直到 n 字符。如果 n 为零或负数,则插入整个字符串。光标右侧的所有字符向右移动,行上最右边的字符丢失。光标位置不变(移动到 yx,如果指定)。

window.insstr(str[, attr])
window.insstr(y, x, str[, attr])

在光标下的字符之前插入一个字符串(尽可能多的字符)。光标右侧的所有字符向右移动,行上最右边的字符丢失。光标位置不会改变(移到 y 后,x,如果指定)。

window.instr([n])
window.instr(y, x[, n])

返回从当前光标位置开始的窗口中提取的字符串,如果指定,则返回 yx。属性从字符中删除。如果指定了 ninstr() 将返回长度最多为 n 个字符的字符串(不包括尾随的NUL)。

window.is_linetouched(line)

如果自上次调用 refresh() 以来修改了指定的行,则返回 True;否则返回 False。如果 line 对给定窗口无效,则引发 curses.error 异常。

window.is_wintouched()

如果自上次调用 refresh() 以来修改了指定的窗口,则返回 True;否则返回 False

window.keypad(yes)

如果 yes 为1,由某些键(键盘,功能键)生成的转义序列将由 curses 解释。如果 yes 为0,则转义序列将保留在输入流中。

window.leaveok(yes)

如果 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)

如果 yes1,则 getch() 将是非阻塞的。

window.notimeout(yes)

如果 yes1,则转义序列不会超时。

如果 yes0,在几毫秒之后,将不解释转义序列,并将保留在输入流中。

window.noutrefresh()

标记为刷新,但等待。此函数更新表示窗口所需状态的数据结构,但不强制更新物理屏幕。要完成它,请调用 doupdate()

window.overlay(destwin[, sminrow, smincol, dminrow, dmincol, dmaxrow, dmaxcol])

将窗口重叠在 destwin 顶部。窗口不需要是相同的大小,仅重叠区域被复制。此副本是非破坏性的,这意味着当前背景字符不会覆盖 destwin 的旧内容。

为了对复制的区域进行细粒度的控制,可以使用第二种形式的 overlay()sminrowsmincol 是源窗口的左上角坐标,其他变量标记目标窗口中的一个矩形。

window.overwrite(destwin[, sminrow, smincol, dminrow, dmincol, dmaxrow, dmaxcol])

覆盖 destwin 顶部的窗口。窗口不必具有相同的大小,在这种情况下,仅复制重叠区域。此副本是破坏性的,这意味着当前背景字符将覆盖 destwin 的旧内容。

为了对复制的区域进行细粒度的控制,可以使用第二种形式的 overwrite()sminrowsmincol 是源窗口的左上角坐标,其他变量标记目标窗口中的一个矩形。

window.putwin(file)

将与窗口关联的所有数据写入提供的文件对象。以后可以使用 getwin() 功能检索此信息。

window.redrawln(beg, num)

指示从 beg 行开始的 num 屏幕行已损坏,应在下一次 refresh() 调用时完全重绘。

window.redrawwin()

触摸整个窗口,使其在下一次 refresh() 呼叫时完全重绘。

window.refresh([pminrow, pmincol, sminrow, smincol, smaxrow, smaxcol])

立即更新显示(使用以前的绘图/删除方法同步实际屏幕)。

只有当窗口是使用 newpad() 创建的焊盘时,才能指定6个可选参数。需要附加的参数来指示垫和屏幕的哪个部分涉及。 pminrowpmincol 指定要在焊盘中显示的矩形的左上角。 sminrowsmincolsmaxrowsmaxcol 指定要在屏幕上显示的矩形的边缘。要在屏幕中显示的矩形的右下角从屏幕坐标计算,因为矩形必须是相同的大小。两个矩形必须完全包含在它们各自的结构中。将 pminrowpmincolsminrowsmincol 的负值视为它们为零。

window.resize(nlines, ncols)

为curses窗口重新分配存储,以将其大小调整为指定的值。如果任一维大于当前值,则窗口的数据填充有具有合并到其中的当前背景再现(由 bkgdset() 设置)的空白。

window.scroll([lines=1])

通过 lines 线向上滚动屏幕或滚动区域。

window.scrollok(flag)

控制当窗口的光标从窗口边缘或滚动区域移开时,由于在底行上执行换行操作或输入最后一行的最后一个字符而发生的情况。如果 flag 为假,则光标位于底线上。如果 flag 为真,则窗口向上滚动一行。注意,为了在终端上获得物理滚动效果,还需要调用 idlok()

window.setscrreg(top, bottom)

将滚动区域从线 top 设置为线 bottom。所有滚动操作都将在此区域中进行。

window.standend()

关闭standout属性。在一些终端上,这具有关闭所有属性的副作用。

window.standout()

打开属性 A_STANDOUT

window.subpad(begin_y, begin_x)
window.subpad(nlines, ncols, begin_y, begin_x)

返回一个子窗口,其左上角在 (begin_y, begin_x),其宽度/高度为 ncols/nlines

window.subwin(begin_y, begin_x)
window.subwin(nlines, ncols, begin_y, begin_x)

返回一个子窗口,其左上角在 (begin_y, begin_x),其宽度/高度为 ncols/nlines

默认情况下,子窗口将从指定位置延伸到窗口的右下角。

window.syncdown()

触摸窗口中已在其任何祖先窗口中触摸过的每个位置。此例程由 refresh() 调用,因此几乎不必手动调用它。

window.syncok(flag)

如果在 flag 设置为 True 的情况下调用,则只要窗口发生更改,就会自动调用 syncup()

window.syncup()

触摸窗口中已更改的窗口的祖先中的所有位置。

window.timeout(delay)

设置窗口的阻塞或非阻塞读取行为。如果 delay 为负,则使用阻塞读(其将无限期地等待输入)。如果 delay 为零,则使用非阻塞读,如果没有输入等待,则 getch() 将返回-1。如果 delay 为正,则 getch() 将阻塞 delay 毫秒,并且如果在该时间结束时仍然没有输入,则返回-1。

window.touchline(start, count[, changed])

假设 count 线已更改,从线 start 开始。如果提供 changed,它指定受影响的行是否标记为已更改(changed = 1)或未更改(changed = 0)。

window.touchwin()

假装整个窗口已经改变,用于绘图优化的目的。

window.untouchwin()

从上次调用 refresh() 以来,将窗口中的所有行标记为未更改。

window.vline(ch, n)
window.vline(y, x, ch, n)

显示从 (y, x) 开始的垂直线,长度 n 由字符 ch 组成。

16.10.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

退出插入char模式

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

g(开头)

KEY_CANCEL

取消

KEY_CLOSE

KEY_COMMAND

Cmd(命令)

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

移位Beg(开始)

KEY_SCANCEL

移位取消

KEY_SCOMMAND

移位命令

KEY_SCOPY

移位复制

KEY_SCREATE

移位创建

KEY_SDC

Shifted删除char

KEY_SDL

Shifted删除线

KEY_SELECT

选择

KEY_SEND

移位结束

KEY_SEOL

移位清除线

KEY_SEXIT

移位Dxit

KEY_SFIND

移位查找

KEY_SHELP

移位帮助

KEY_SHOME

移位家

KEY_SIC

移位输入

KEY_SLEFT

左移箭头

KEY_SMESSAGE

移位消息

KEY_SMOVE

移动移动

KEY_SNEXT

移位下一步

KEY_SOPTIONS

移位选项

KEY_SPREVIOUS

Shifted上一页

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

最大键值

在VT100及其软件仿真(例如X终端仿真器)上,通常至少有四个功能键(KEY_F1KEY_F2KEY_F3KEY_F4)可用,箭头键以明显的方式映射到 KEY_UPKEY_DOWNKEY_LEFTKEY_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终端的软件仿真上可用。当没有可用的图形时,诅咒回退到可粗略打印的ASCII近似。

注解

这些只有在 initscr() 被调用后才可用。

ACS代码

含义

ACS_BBSS

右上角的备用名称

ACS_BLOCK

实心方块

ACS_BOARD

董事会

ACS_BSBS

水平线的备用名称

ACS_BSSB

左上角的备用名称

ACS_BSSS

顶部三通的备用名称

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

右三通的备用名称

ACS_SSBB

左下角的备用名称

ACS_SSBS

底部三通的备用名称

ACS_SSSB

左三通的备用名称

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_RED

COLOR_WHITE

白色

COLOR_YELLOW

黄色

16.11. curses.textpad — curses程序的文本输入小部件

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破折号,垂直条和加号来绘制。

16.11.1. 文本框对象

您可以如下所示实例化 Textbox 对象:

class curses.textpad.Textbox(win)

返回一个文本框widget对象。 win 参数应该是一个curses WindowObject,其中包含文本框。文本框的编辑光标最初位于包含窗口的左上角,坐标为 (0, 0)。实例的 stripspaces 标志最初开启。

Textbox 对象有以下方法:

edit([validator])

这是您通常使用的入口点。它接受编辑按键,直到输入一个终止按键。如果提供 validator,它必须是一个函数。将按键输入的每个击键作为参数调用它;命令分派对结果完成。此方法以字符串形式返回窗口内容;是否包括窗口中的空白受 stripspaces 属性影响。

do_command(ch)

处理单个命令按键。以下是支持的特殊按键:

击键

行动

Control-A

转到窗口的左边缘。

Control-B

光标向左移动,如果合适,则卷动到上一行。

Control-D

删除光标下的字符。

Control-E

转到右边缘(strippaces off)或结束线(strippaces on)。

Control-F

光标右,在适当时包装到下一行。

Control-G

终止,返回窗口内容。

Control-H

向后删除字符。

Control-J

如果窗口为1行,则终止,否则插入换行符。

Control-K

如果线为空白,请将其删除,否则清除到行尾。

Control-L

刷新屏幕。

Control-N

光标向下;向下移动一行。

Control-O

在光标位置插入空行。

Control-P

光标;向上移动一行。

如果光标位于不可能移动的边缘,移动操作不执行任何操作。在可能的情况下支持以下同义词:

不变

击键

KEY_LEFT

Control-B

KEY_RIGHT

Control-F

KEY_UP

Control-P

KEY_DOWN

Control-N

KEY_BACKSPACE

Control-h

所有其他按键都被视为插入给定字符并向右移动(带换行)的命令。

gather()

以字符串形式返回窗口内容;是否包括窗口中的空白受 stripspaces 成员的影响。

stripspaces

此属性是控制窗口中空白解释的标志。当它打开时,每行上的尾随空白将被忽略;则将光标停留在尾部空白上的任何光标移动都会到达该行的末尾,并且当收集窗口内容时,尾部空白被去除。