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

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

而vurses最广泛应用在 Unix 环境中,版本以供 Windows、 DOS以及其他系统。此扩展模块用于匹配的 ncurses API,开源 curses 库托管在 Linux 和 BSD Unix 变种。

注意

从版本5.4起,ncurses库决定如何使用nl_langinfo函数解释非ASCII数据。这意味着您必须在应用程序中调用locale.setlocale(),并使用系统的可用编码之一对Unicode字符串进行编码。此示例使用系统的默认编码:

import locale
locale.setlocale(locale.LC_ALL, '')
code = locale.getpreferredencoding()

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

也可以看看

模块curses.ascii
用于使用ASCII字符的实用程序,无论您的区域设置如何。
模块curses.panel
一个面板堆栈扩展,增加了深度来诅咒窗口。
模块curses.textpad
支持Emacs类似绑定的curses的可编辑文本小部件。
Curses Programming with Python
教程材料关于使用curses与Python,由Andrew Kuchling和Eric Raymond。

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

16.10.1. Functions

这个模块 curses 定义了一下异常。

exception curses.error

curses 库函数将返回错误时引发的异常。

注意

当一个函数方法或者参数 xy 是可选的时候,它们就默认为当前的光标位置。attr是可选的,它默认为 A_NORMAL.

模块curses定义了一下函数:

curses.baudrate()

以每秒位数返回终端的输出速度。在软件的终端仿真器上它将有一个固定的高值。包括由于历史的原因;在前时期,它用于编写时间延迟的输出循环,偶尔更改接口线路速度。

curses.beep()

发出短注意的声音。

curses.can_change_color()

返回 True 或者 False, 具体取决于是否程序员可以更改显示的颜色由终端。

curses.cbreak()

进入 cbreak 模式。在 cbreak 模式 (有时称为"rare"模式) 正常 tty 线缓冲关闭和字符都是可供读取一个接一个。然而,不同于raw模式,特殊字符 (中断、 退出、 暂停和流控制) 保留他们对 tty 驱动程序和调用程序的影响。调用raw() 然后 cbreak()离开终端进入cbreak模式。

curses.color_content(color_number)

返回一组红绿蓝RGB的颜色强度分量color_number,其值要介于 0COLORS.返回一个 3 元组,则包含 R、 G、 B 值的给定的颜色, 其值在 0 (no component) 和 1000 (maximum amount of component).

curses.color_pair(color_number)

返回在指定的颜色显示文本的属性值。此属性可以跟 A_STANDOUT, A_REVERSE, 和其他A_* 组合.pair_number() 是此函数的对应。

curses.curs_set(visibility)

设置光标的状态。visibility(可见性) 可以设置为 0, 1, or 2, for不可见,普通的, 或者非常明显.如果终端支持的可见性要求,则返回以前的游标状态;否则,则引发异常。许多终端,"可见"模式是下划线光标和"非常明显"模式是一个块游标。

curses.def_prog_mode()

作为"程序"模式,模式正在运行的程序使用curss时保存当前的终端模式。(对应的是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()对window做了相关操作后,使用 noutrefresh() 调用后有所更新。正常的refresh()调用只是noutrefresh(),后面是doupdate();如果您必须更新多个窗口,您可以通过在所有窗口上发出noutrefresh()调用,然后单击doupdate()来提高性能,并减少屏幕闪烁。

curses.echo()

进入echo模型。在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 is an integer value whose bits will be set to indicate the type of event, and will be the bitwise OR of one or more of the following constants, where n is the button number from 1 to 4: BUTTONn_PRESSED, BUTTONn_RELEASED, BUTTONn_CLICKED, BUTTONn_DOUBLE_CLICKED, BUTTONn_TRIPLE_CLICKED, BUTTON_SHIFT, BUTTON_CTRL, BUTTON_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模式,用户键入的字符可立即用于程序。但是,在阻塞十分之一十分之几秒后,如果没有键入任何内容,则会引发异常。十进制的值必须是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个参数来指定要显示的焊盘部分和屏幕上用于显示。参数为pminrowpmincolsminrowsmincolsmaxrow smaxcolp参数指的是要显示的焊盘区域的左上角,s参数定义屏幕上要显示焊盘区域的剪切框。

curses.newwin(nlines, ncols)
curses。 newwin nlinesncolsbegin_y t5 >,begin_x

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

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

curses.nl()

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

curses.nocbreak()

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

curses.noecho()

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

curses.nonl()

离开换行模式。禁止将输入翻译为换行符,并禁用将换行符低级转换为换行符/输出返回(但这不会改变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])

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

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() initializes eight basic colors (black, red, green, yellow, blue, magenta, cyan, and white), and two global variables in the curses module, COLORS and COLOR_PAIRS, containing the maximum number of colors and color-pairs the terminal can support. 它还将终端上的颜色还原为终端刚刚打开时的值。

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) could result in b'\033[6;4H', the exact result depending on terminal type.

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()

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

版本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之前调用此函数。When flag is False, the values of lines and columns specified in the terminfo database will be used, even if environment variables LINES and COLUMNS (used by default) are set, or if curses is running in a window (in which case default behavior would be to use the window size if LINES and COLUMNS are not set).

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. Window Objects

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

window.addch(ch[, attr])
窗口。 addch yxch t5 > [attr ]

注意

字符表示C字符(ASCII代码),而不是Python字符(长度为1的字符串)。(每当文档提到字符时,此注释为真。)内建ord()方便将字符串传递给代码。

在属性attr(y, x)绘制字符ch字符以前画家在那个位置。默认情况下,字符位置和属性是窗口对象的当前设置。

window.addnstr(str, n[, attr])
窗口。 addnstr yxstr t5 >,n [attr ]

(y, x)上画字符串str的最多n与属性attr,覆盖以前在显示器上的任何内容。

window.addstr(str[, attr])
窗口。 addstr yxstr t5 > [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值将导致为该参数使用默认字符。关键字参数可以使用默认值列在此表中:

参数描述默认值
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均为vertch,且ts t6 >和bs都是horch此功能始终使用默认角字符。

window.chgat(attr)
窗口。 chgat numattr
窗口。 chgat yxattr t5 >
窗口。 chgat yxnum t5 >,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)
窗口。 德文 nlinesncolsbegin_y t5 >,begin_x

除了begin_ybegin_x 之外,“derived window”,derwin()的缩写与调用subwin()返回派生窗口的窗口对象。

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])

获取一个字符。请注意,返回的整数不是必须在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)
窗口。 hline yxch t5 >,n

Display a horizontal line starting at (y, x) with length n consisting of the character ch.

window.idcok(flag)

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

window.idlok(yes)

If called with yes equal to 1, curses will try and use hardware line editing facilities. 否则,将禁用线路插入/删除。

window.immedok(flag)

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

window.inch([y, x])

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

window.insch(ch[, attr])
窗口。 insch yxch t5 > [attr ]

在属性attr(y, x)处绘制字符ch T0>从位置x向右移动一个字符。

window.insdelln(nlines)

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

window.insertln()

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

window.insnstr(str, n[, attr])
窗口。 insnstr yxstr t5 >,n [attr ]

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

window.insstr(str[, attr])
窗口。 insstr yxstr t5 > [attr ]

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

window.instr([n])
窗口。 instr yx n ] ))

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

window.is_linetouched(line)

Return True if the specified line was modified since the last call to refresh(); otherwise return False. 如果对给定窗口无效,则引发curses.error异常。

window.is_wintouched()

Return True if the specified window was modified since the last call to refresh(); otherwise return 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)

如果yes1getch()将是非阻塞的。

window.notimeout(yes)

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

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

指示num屏幕行,从开始开始,已损坏,应在下一个refresh()调用时重新绘制。

window.redrawwin()

触摸整个窗口,即可在下次refresh()调用时重新绘制该窗口。

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

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

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

window.resize(nlines, ncols)

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

window.scroll([lines=1])

线 T0>向上滚动屏幕或向上滚动区域。

window.scrollok(flag)

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

window.setscrreg(top, bottom)

将滚动区域从顶部设置为底部所有滚动操作都将在此区域中进行。

window.standend()

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

window.standout()

开启属性A_STANDOUT

window.subpad(begin_y, begin_x)
窗口。 子板 nlinesncolsbegin_y t5 >,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)

如果使用标志设置为True进行调用,则只要窗口发生变化,就会自动调用syncup()

window.syncup()

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

window.timeout(delay)

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

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

假设计数行已更改,从开始开始。如果提供了,则指定受影响的行是否标记为已更改(已更改 = 1)或未更改(已更改 = 0) 。

window.touchwin()

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

window.untouchwin()

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

window.vline(ch, n)
窗口。 vline yxch t5 >,n

Display a vertical line starting at (y, x) with length n consisting of the character ch.

16.10.3. Constants

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_BEGg(开头)
KEY_CANCEL取消
KEY_CLOSE
KEY_COMMANDCmd(命令)
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_SDCShifted删除char
KEY_SDLShifted删除线
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_SPREVIOUSShifted上一页
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最大键值

On VT100s and their software emulations, such as X terminal emulators, there are normally at least four function keys (KEY_F1, KEY_F2, KEY_F3, KEY_F4) available, and the arrow keys mapped to KEY_UP, KEY_DOWN, KEY_LEFT and KEY_RIGHT in the obvious way. 如果您的机器有一个PC键盘,可以期望箭头键和十二个功能键(较旧的PC键盘可能只有十个功能键);此外,以下键盘映射是标准的:

键帽不变
InsertKEY_IC
DeleteKEY_DC
HomeKEY_HOME
EndKEY_END
KEY_PPAGE
向下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 objects

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

class curses.textpad.Textbox(win)

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

Textbox对象具有以下方法:

edit([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_LEFTControl-B
KEY_RIGHTControl-F
KEY_UPControl-P
KEY_DOWNControl-N
KEY_BACKSPACEControl-h

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

gather()

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

stripspaces

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