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

源代码: Lib/curses


curses 模块提供了一个 curses 库的接口,它是可移植高级终端处理的事实标准。

虽然 curses 在 Unix 环境中使用最为广泛,但也有适用于 Windows、DOS 以及可能其他系统的版本。此扩展模块旨在匹配 ncurses 的 API,ncurses 是托管在 Linux 和 Unix 的 BSD 变体上的开源 curses 库。

可用性:非 Android、非 iOS、非 WASI。

此模块在 移动平台WebAssembly 平台 上不受支持。

注解

每当文档中提到字符时,它可以指定为整数、单字符 Unicode 字符串或单字节字节字符串。

每当文档中提到字符串时,它可以指定为 Unicode 字符串或字节字符串。

参见

模块 curses.ascii

用于处理 ASCII 字符的实用工具,无论您的语言环境设置如何。

模块 curses.panel

一个面板堆栈扩展,它为 curses 窗口添加了深度。

模块 curses.textpad

用于 curses 的可编辑文本小部件,支持类似 Emacs 的绑定。

使用 Python 进行 Curses 编程

关于使用 Python 进行 curses 编程的教程资料,作者为 Andrew Kuchling 和 Eric Raymond。

函数

模块 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 - 1 之间。返回一个 3 元组,其中包含给定颜色的 R、G、B 值,该值将在 0 (无分量)和 1000 (最大分量)之间。

curses.color_pair(pair_number)

返回用于以指定颜色对显示文本的属性值。仅支持前 256 个颜色对。此属性值可以与 A_STANDOUTA_REVERSE 和其他 A_* 属性组合使用。 pair_number() 是此函数的对应函数。

curses.curs_set(visibility)

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

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;禁用功能 clearcupcudcud1cuu1cuuvpa;并且 home 字符串被设置为 cr 的值。效果是将光标限制在当前行,屏幕更新也是如此。这可以用于启用一次一个字符的行编辑,而无需触及屏幕的其余部分。

curses.flash()

闪烁屏幕。即,将其更改为反相显示,然后在短时间内改回。有些人喜欢这种“可视响铃”作为 beep() 发出的声音提示的替代方案。

curses.flushinp()

刷新所有输入缓冲区。这将丢弃用户键入的、尚未被程序处理的所有预输入。

curses.getmouse()

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

在 3.10 版本中更改: 如果底层 curses 库提供了 BUTTON5_* 常量,则现在会公开这些常量。

curses.getsyx()

以元组 (y, x) 的形式返回虚拟屏幕光标的当前坐标。如果 leaveok 当前为 True,则返回 (-1, -1)

curses.getwin(file)

读取先前调用 window.putwin() 存储在文件中的窗口相关数据。然后,该例程使用该数据创建并初始化一个新窗口,并返回新的窗口对象。

curses.has_colors()

如果终端可以显示颜色,则返回 True;否则,返回 False

curses.has_extended_color_support()

如果模块支持扩展颜色,则返回 True;否则,返回 False。扩展颜色支持允许支持 16 种以上颜色的终端(例如,xterm-256color)使用超过 256 种颜色对。

扩展颜色支持需要 ncurses 6.1 或更高版本。

在 3.10 版本中添加。

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 - 1 之间。rgb 的每个值都必须是介于 01000 之间的值。当使用 init_color() 时,屏幕上该颜色的所有出现都将立即更改为新定义。此函数在大多数终端上是空操作;只有当 can_change_color() 返回 True 时,它才处于活动状态。

curses.init_pair(pair_number, fg, bg)

更改颜色对的定义。它接受三个参数:要更改的颜色对的编号、前景色编号和背景色编号。pair_number 的值必须在 1COLOR_PAIRS - 1 之间(0 号颜色对固定为黑底白字,无法更改)。fgbg 参数的值必须在 0COLORS - 1 之间,或者在调用 use_default_colors() 后,可以为 -1。如果颜色对之前已初始化,屏幕将被刷新,并且该颜色对的所有实例都将更改为新的定义。

curses.initscr()

初始化库。返回一个代表整个屏幕的 窗口 对象。

注解

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

curses.is_term_resized(nlines, ncols)

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

curses.isendwin()

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

curses.keyname(k)

以字节对象的形式返回编号为 k 的键的名称。生成可打印 ASCII 字符的键的名称是该键的字符。控制键组合的名称是一个双字节字节对象,由一个插入符号 (b'^') 后跟相应的可打印 ASCII 字符组成。alt 键组合 (128–255) 的名称是一个字节对象,由前缀 b'M-' 后跟相应的 ASCII 字符的名称组成。

curses.killchar()

以单字节字节对象的形式返回用户当前的行删除字符。在 Unix 操作系统下,这是 curses 程序的控制 tty 的属性,不由 curses 库本身设置。

curses.longname()

返回一个字节对象,其中包含描述当前终端的 terminfo 长名称字段。详细描述的最大长度为 128 个字符。仅在调用 initscr() 后定义。

curses.meta(flag)

如果 flagTrue,则允许输入 8 位字符。如果 flagFalse,则仅允许输入 7 位字符。

curses.mouseinterval(interval)

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

curses.mousemask(mousemask)

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

curses.napms(ms)

休眠 ms 毫秒。

curses.newpad(nlines, ncols)

创建并返回一个指向具有给定行数和列数的新 pad 数据结构的指针。将 pad 作为窗口对象返回。

pad 类似于窗口,只是它不受屏幕大小的限制,并且不一定与屏幕的特定部分相关联。当需要一个大窗口,并且一次只有一个窗口的一部分在屏幕上时,可以使用 pad。不会发生 pad 的自动刷新(例如,来自滚动或输入的回显)。pad 的 refresh()noutrefresh() 方法需要 6 个参数来指定要显示的 pad 的部分以及用于显示的屏幕上的位置。参数为 pminrowpmincolsminrowsmincolsmaxrowsmaxcolp 参数引用要显示的 pad 区域的左上角,s 参数定义屏幕上的一个裁剪框,pad 区域将在其中显示。

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') 的行为,它始终在虚拟屏幕上执行等效的回车符和换行符操作)。关闭转换后,curses 有时可以稍微加快垂直移动速度;此外,它将能够检测输入的回车键。

curses.noqiflush()

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

curses.noraw()

离开原始模式。返回到带有行缓冲的正常“熟”模式。

curses.pair_content(pair_number)

返回一个元组 (fg, bg),其中包含请求的颜色对的颜色。pair_number 的值必须介于 0COLOR_PAIRS - 1 之间。

curses.pair_number(attr)

返回由属性值 attr 设置的颜色对的编号。 color_pair() 是此函数的对应函数。

curses.putp(str)

等效于 tputs(str, 1, putchar);为当前终端发出指定的 terminfo 功能的值。请注意,putp() 的输出始终发送到标准输出。

curses.qiflush([flag])

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

curses.raw()

进入原始模式。在原始模式下,正常的行缓冲和中断、退出、挂起以及流控制键的处理将被关闭;字符将逐个呈现给 curses 输入函数。

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() 函数尝试调整所有窗口的大小。但是,由于 pad 的调用约定,如果不与应用程序进行额外的交互,则无法调整这些窗口的大小。

curses.resizeterm(nlines, ncols)

将标准窗口和当前窗口的大小调整为指定的尺寸,并调整 curses 库使用的其他用于记录窗口尺寸的簿记数据(特别是 SIGWINCH 处理程序)。

curses.savetty()

将终端模式的当前状态保存在缓冲区中,可供 resetty() 使用。

curses.get_escdelay()

检索由 set_escdelay() 设置的值。

在 3.9 版本中添加。

curses.set_escdelay(ms)

设置在读取转义字符后等待的毫秒数,以区分键盘上输入的单个转义字符与光标和功能键发送的转义序列。

在 3.9 版本中添加。

curses.get_tabsize()

检索由 set_tabsize() 设置的值。

在 3.9 版本中添加。

curses.set_tabsize(size)

设置当 curses 库将制表符转换为空格并将其添加到窗口时使用的列数。

在 3.9 版本中添加。

curses.setsyx(y, x)

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

curses.setupterm(term=None, fd=-1)

初始化终端。 term 是一个给出终端名称的字符串,或者为 None;如果省略或为 None,则将使用 TERM 环境变量的值。fd 是将向其发送任何初始化序列的文件描述符;如果未提供或为 -1,则将使用 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 不是 terminfo “字符串功能”,或者被取消或在终端描述中不存在,则返回 None

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

使用提供的参数实例化字节对象 str,其中 str 应该是从 terminfo 数据库获得的参数化字符串。 例如,tparm(tigetstr("cup"), 5, 3) 可能会产生 b'\033[6;4H',具体结果取决于终端类型。

curses.typeahead(fd)

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

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

curses.unctrl(ch)

返回一个字节对象,它是字符 ch 的可打印表示形式。 控制字符表示为插入符号后跟字符,例如 b'^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, /, *args, **kwargs)

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

窗口对象

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

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

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

注解

在窗口、子窗口或 pad 外部写入会引发 curses.error。尝试写入窗口、子窗口或 pad 的右下角会导致在打印字符后引发异常。

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,覆盖显示器上之前的内容。

注解

  • 在窗口、子窗口或 pad 外部写入会引发 curses.error。尝试写入窗口、子窗口或 pad 的右下角会导致在打印字符串后引发异常。

  • 此 Python 模块的后端 ncurses 中的一个 bug 会在调整窗口大小时导致 SegFault。这在 ncurses-6.1-20190511 中已修复。如果您被困在使用早期版本的 ncurses,如果您不使用嵌入换行符的 str 调用 addstr(),则可以避免触发此问题。相反,请为每行单独调用 addstr()

window.attroff(attr)

从应用于当前窗口所有写入操作的“背景”集中删除属性 attr

window.attron(attr)

将属性 attr 添加到应用于当前窗口所有写入操作的“背景”集中。

window.attrset(attr)

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

window.bkgd(ch[, attr])

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

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

  • 前一个背景字符出现的任何位置都会更改为新的背景字符。

window.bkgdset(ch[, attr])

设置窗口的背景。窗口的背景由一个字符和属性的任意组合组成。背景的属性部分与写入窗口的所有非空白字符组合(进行或运算)。背景的字符和属性部分都与空白字符组合。背景成为字符的属性,并随字符一起移动,进行任何滚动和插入/删除行/字符操作。

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,而 tsbs 都是 horch。此函数始终使用默认的角字符。

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

设置当前光标位置或指定位置 (y, x)num个字符的属性。如果未提供 numnum-1,则属性将应用于该行末尾的所有字符。如果提供了位置,此函数会将光标移动到位置 (y, x)。更改的行将使用 touchline() 方法进行标记,以便在下次窗口刷新时重新显示内容。

window.clear()

类似于 erase(),但也会在下次调用 refresh() 时导致整个窗口重绘。

window.clearok(flag)

如果 flagTrue,则下次调用 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。它对于确定屏幕窗口的哪个子集包围鼠标事件的位置非常有用。

在 3.10 版本中更改: 之前它返回 10 而不是 TrueFalse

window.encoding

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

3.3 版本新增。

window.erase()

清除窗口。

window.getbegyx()

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

window.getbkgd()

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

window.getch([y, x])

获取一个字符。请注意,返回的整数一定在 ASCII 范围内:功能键、小键盘键等等都用大于 255 的数字表示。在非延迟模式下,如果没有输入,则返回 -1,否则等待直到按下键。

window.get_wch([y, x])

获取一个宽字符。对于大多数键,返回一个字符;对于功能键、小键盘键和其他特殊键,返回一个整数。在非延迟模式下,如果没有输入,则引发异常。

3.3 版本新增。

window.getkey([y, x])

获取一个字符,返回字符串而不是像 getch() 那样返回整数。功能键、小键盘键和其他特殊键返回包含键名称的多字节字符串。在非延迟模式下,如果没有输入,则引发异常。

window.getmaxyx()

返回窗口高度和宽度的元组 (y, x)

window.getparyx()

返回此窗口相对于其父窗口的起始坐标,以元组 (y, x) 的形式返回。如果此窗口没有父窗口,则返回 (-1, -1)

window.getstr()
window.getstr(n)
window.getstr(y, x)
window.getstr(y, x, n)

从用户读取一个字节对象,具有基本的行编辑功能。

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

如果 flagTruecurses 将尝试使用硬件行编辑功能。否则,禁用行插入/删除。

window.immedok(flag)

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

window.inch([y, x])

返回窗口中给定位置的字符。低 8 位是字符本身,高位是属性。

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

(y, x) 处绘制字符 ch,属性为 attr,并将从位置 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 为零或负数,则插入整个字符串。光标右侧的所有字符都向右移动,该行最右侧的字符丢失。光标位置不会改变(如果指定,则在移动到 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)

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

window.is_wintouched()

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

window.keypad(flag)

如果 flagTrue,则由某些键(小键盘、功能键)生成的转义序列将由 curses 解释。如果 flagFalse,则转义序列将按原样保留在输入流中。

window.leaveok(flag)

如果 flagTrue,则光标在更新时会留在原处,而不是在“光标位置”。这可以在可能的情况下减少光标移动。如果可能,光标将会被设置为不可见。

如果 flagFalse,则光标在更新后始终位于“光标位置”。

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

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

window.notimeout(flag)

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

如果 flagFalse,则在几毫秒后,转义序列将不会被解释,并将按原样保留在输入流中。

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() 创建的 pad 时,才能指定 6 个可选参数。需要额外的参数来指示 pad 和屏幕的哪一部分参与其中。pminrowpmincol 指定要在 pad 中显示的矩形的左上角。sminrowsmincolsmaxrowsmaxcol 指定要在屏幕上显示的矩形的边缘。要在 pad 中显示的矩形的右下角是根据屏幕坐标计算的,因为矩形必须大小相同。两个矩形都必须完全包含在其各自的结构中。pminrowpmincolsminrowsmincol 的负值将被视为零。

window.resize(nlines, ncols)

重新分配 curses 窗口的存储空间,以将其尺寸调整为指定值。如果任一尺寸大于当前值,则窗口的数据将填充空格,这些空格将合并当前的背景渲染(由 bkgdset() 设置)。

window.scroll([lines=1])

将屏幕或滚动区域向上滚动 lines 行。

window.scrollok(flag)

控制当窗口的光标由于底线的换行操作或键入最后一行的最后一个字符而移动到窗口或滚动区域的边缘之外时会发生什么。如果 flagFalse,则光标将保留在底线上。如果 flagTrue,则窗口将向上滚动一行。请注意,为了在终端上获得物理滚动效果,还必须调用 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),宽度/高度为 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)

如果 flagTrue,则当窗口发生更改时,会自动调用 syncup()

window.syncup()

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

window.timeout(delay)

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

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

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

window.touchwin()

为了进行绘图优化,假设整个窗口已更改。

window.untouchwin()

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

window.vline(ch, n[, attr])
window.vline(y, x, ch, n[, attr])

显示一条垂直线,从 (y, x) 开始,长度为 n,由带有属性 attr 的字符 ch 组成。

常量

curses 模块定义以下数据成员

curses.ERR

某些返回整数的 curses 例程(例如 getch())在失败时返回 ERR

curses.OK

某些返回整数的 curses 例程(例如 napms())在成功时返回 OK

curses.version
curses.__version__

一个表示模块当前版本的字节对象。

curses.ncurses_version

一个命名元组,包含 ncurses 库版本的三个组成部分:majorminorpatch。所有值都是整数。也可以通过名称访问这些组成部分,因此 curses.ncurses_version[0] 等同于 curses.ncurses_version.major,依此类推。

可用性:如果使用了 ncurses 库。

在版本 3.8 中添加。

curses.COLORS

终端可以支持的最大颜色数。仅在调用 start_color() 后定义。

curses.COLOR_PAIRS

终端可以支持的最大颜色对数。仅在调用 start_color() 后定义。

curses.COLS

屏幕的宽度,即列数。仅在调用 initscr() 后定义。由 update_lines_cols()resizeterm()resize_term() 更新。

curses.LINES

屏幕的高度,即行数。仅在调用 initscr() 后定义。由 update_lines_cols()resizeterm()resize_term() 更新。

一些常量可用于指定字符单元格属性。可用的确切常量取决于系统。

属性

含义

curses.A_ALTCHARSET

备用字符集模式

闪烁模式

curses.A_BOLD

粗体模式

curses.A_DIM

暗淡模式

curses.A_INVIS

不可见或空白模式

curses.A_ITALIC

斜体模式

curses.A_NORMAL

正常属性

curses.A_PROTECT

保护模式

curses.A_REVERSE

反转背景和前景色

curses.A_STANDOUT

突出显示模式

curses.A_UNDERLINE

下划线模式

curses.A_HORIZONTAL

水平高亮

curses.A_LEFT

左侧高亮

curses.A_LOW

低高亮

curses.A_RIGHT

右侧高亮

curses.A_TOP

顶部高亮

curses.A_VERTICAL

垂直高亮

3.7 版本新增: A_ITALIC 被添加。

提供多个常量用于提取某些方法返回的相应属性。

位掩码

含义

curses.A_ATTRIBUTES

提取属性的位掩码

curses.A_CHARTEXT

提取字符的位掩码

curses.A_COLOR

提取颜色对字段信息的位掩码

键由以 KEY_ 开头的整数常量表示。 可用的确切键帽取决于系统。

键常量

curses.KEY_MIN

最小键值

curses.KEY_BREAK

Break 键(不可靠)

curses.KEY_DOWN

下箭头

curses.KEY_UP

上箭头

curses.KEY_LEFT

左箭头

curses.KEY_RIGHT

右箭头

curses.KEY_HOME

Home 键(向上+左箭头)

curses.KEY_BACKSPACE

退格键(不可靠)

curses.KEY_F0

功能键。 最多支持 64 个功能键。

curses.KEY_Fn

功能键 n 的值

curses.KEY_DL

删除行

curses.KEY_IL

插入行

curses.KEY_DC

删除字符

curses.KEY_IC

插入字符或进入插入模式

curses.KEY_EIC

退出插入字符模式

curses.KEY_CLEAR

清除屏幕

curses.KEY_EOS

清除到屏幕末尾

curses.KEY_EOL

清除到行末

curses.KEY_SF

向前滚动 1 行

curses.KEY_SR

向后(反向)滚动 1 行

curses.KEY_NPAGE

下一页

curses.KEY_PPAGE

上一页

curses.KEY_STAB

设置制表符

curses.KEY_CTAB

清除制表符

curses.KEY_CATAB

清除所有制表符

curses.KEY_ENTER

回车或发送(不可靠)

curses.KEY_SRESET

软(部分)重置(不可靠)

curses.KEY_RESET

重置或硬重置(不可靠)

curses.KEY_PRINT

打印

curses.KEY_LL

Home 向下或底部(左下)

curses.KEY_A1

小键盘左上角

curses.KEY_A3

小键盘右上角

curses.KEY_B2

小键盘中心

curses.KEY_C1

小键盘左下角

curses.KEY_C3

小键盘右下角

curses.KEY_BTAB

反向制表符

curses.KEY_BEG

开始

curses.KEY_CANCEL

取消

curses.KEY_CLOSE

关闭

curses.KEY_COMMAND

Cmd (命令)

curses.KEY_COPY

复制

curses.KEY_CREATE

创建

curses.KEY_END

结束

curses.KEY_EXIT

退出

curses.KEY_FIND

查找

curses.KEY_HELP

帮助

curses.KEY_MARK

标记

curses.KEY_MESSAGE

消息

curses.KEY_MOVE

移动

curses.KEY_NEXT

下一个

curses.KEY_OPEN

打开

curses.KEY_OPTIONS

选项

curses.KEY_PREVIOUS

上一个(previous)

curses.KEY_REDO

重做

curses.KEY_REFERENCE

参考(reference)

curses.KEY_REFRESH

刷新

curses.KEY_REPLACE

替换

curses.KEY_RESTART

重启

curses.KEY_RESUME

恢复

curses.KEY_SAVE

保存

curses.KEY_SBEG

Shifted Beg (beginning) (Shift + 开始)

curses.KEY_SCANCEL

Shifted Cancel (Shift + 取消)

curses.KEY_SCOMMAND

Shifted Command (Shift + 命令)

curses.KEY_SCOPY

Shifted Copy (Shift + 复制)

curses.KEY_SCREATE

Shifted Create (Shift + 创建)

curses.KEY_SDC

Shifted Delete char (Shift + 删除字符)

curses.KEY_SDL

Shifted Delete line (Shift + 删除行)

curses.KEY_SELECT

选择

curses.KEY_SEND

Shifted End (Shift + 结束)

curses.KEY_SEOL

Shifted Clear line (Shift + 清除行)

curses.KEY_SEXIT

Shifted Exit (Shift + 退出)

curses.KEY_SFIND

Shifted Find (Shift + 查找)

curses.KEY_SHELP

Shifted Help (Shift + 帮助)

curses.KEY_SHOME

Shifted Home (Shift + Home)

curses.KEY_SIC

Shifted Input (Shift + 输入)

curses.KEY_SLEFT

Shifted Left arrow (Shift + 左箭头)

curses.KEY_SMESSAGE

Shifted Message (Shift + 消息)

curses.KEY_SMOVE

Shifted Move (Shift + 移动)

curses.KEY_SNEXT

Shifted Next (Shift + 下一个)

curses.KEY_SOPTIONS

Shifted Options (Shift + 选项)

curses.KEY_SPREVIOUS

Shifted Prev (Shift + 上一个)

curses.KEY_SPRINT

Shifted Print (Shift + 打印)

curses.KEY_SREDO

Shifted Redo (Shift + 重做)

curses.KEY_SREPLACE

Shifted Replace (Shift + 替换)

curses.KEY_SRIGHT

Shifted Right arrow (Shift + 右箭头)

curses.KEY_SRSUME

Shifted Resume (Shift + 恢复)

curses.KEY_SSAVE

Shifted Save (Shift + 保存)

curses.KEY_SSUSPEND

Shifted Suspend (Shift + 暂停)

curses.KEY_SUNDO

Shifted Undo (Shift + 撤销)

curses.KEY_SUSPEND

暂停

curses.KEY_UNDO

撤销

curses.KEY_MOUSE

发生了鼠标事件

curses.KEY_RESIZE

终端调整大小事件

curses.KEY_MAX

最大键值

在 VT100 及其软件模拟器(例如 X 终端模拟器)上,通常至少有四个功能键(KEY_F1KEY_F2KEY_F3KEY_F4)可用,并且箭头键以显而易见的方式映射到 KEY_UPKEY_DOWNKEY_LEFTKEY_RIGHT。如果您的机器有 PC 键盘,则可以安全地期望箭头键和十二个功能键(较旧的 PC 键盘可能只有十个功能键);此外,以下小键盘映射是标准的

键帽

常量

插入

KEY_IC

删除

KEY_DC

Home

KEY_HOME

结束

KEY_END

Page Up

KEY_PPAGE

Page Down

KEY_NPAGE

下表列出了来自备用字符集的字符。这些字符是从 VT100 终端继承的,通常在 X 终端等软件模拟器上可用。当没有可用的图形时,curses 会退回到粗略的可打印 ASCII 近似值。

注解

这些仅在调用 initscr() 后才可用。

ACS 代码

含义

curses.ACS_BBSS

右上角的别名

curses.ACS_BLOCK

实心方块

curses.ACS_BOARD

方块板

curses.ACS_BSBS

水平线的别名

curses.ACS_BSSB

左上角的别名

curses.ACS_BSSS

顶端T型连接的别名

curses.ACS_BTEE

底端T型连接

curses.ACS_BULLET

项目符号

curses.ACS_CKBOARD

棋盘格(点画)

curses.ACS_DARROW

向下箭头

curses.ACS_DEGREE

度数符号

curses.ACS_DIAMOND

菱形

curses.ACS_GEQUAL

大于或等于号

curses.ACS_HLINE

水平线

curses.ACS_LANTERN

灯笼符号

curses.ACS_LARROW

向左箭头

curses.ACS_LEQUAL

小于或等于号

curses.ACS_LLCORNER

左下角

curses.ACS_LRCORNER

右下角

curses.ACS_LTEE

左侧T型连接

curses.ACS_NEQUAL

不等于号

curses.ACS_PI

字母 pi

curses.ACS_PLMINUS

加号或减号

curses.ACS_PLUS

大加号

curses.ACS_RARROW

向右箭头

curses.ACS_RTEE

右侧T型连接

curses.ACS_S1

扫描线 1

curses.ACS_S3

扫描线 3

curses.ACS_S7

扫描线 7

curses.ACS_S9

扫描线 9

curses.ACS_SBBS

右下角的别名

curses.ACS_SBSB

垂直线的别名

curses.ACS_SBSS

右侧T型连接的别名

curses.ACS_SSBB

左下角的别名

curses.ACS_SSBS

底部T型连接的别名

curses.ACS_SSSB

左侧T型连接的别名

curses.ACS_SSSS

交叉或大加号的别名

curses.ACS_STERLING

英镑符号

curses.ACS_TTEE

顶部T型连接

curses.ACS_UARROW

向上箭头

curses.ACS_ULCORNER

左上角

curses.ACS_URCORNER

右上角

curses.ACS_VLINE

垂直线

下表列出了 getmouse() 使用的鼠标按钮常量

鼠标按钮常量

含义

curses.BUTTONn_PRESSED

鼠标按钮 n 被按下

curses.BUTTONn_RELEASED

鼠标按钮 n 被释放

curses.BUTTONn_CLICKED

鼠标按钮 n 被单击

curses.BUTTONn_DOUBLE_CLICKED

鼠标按钮 n 被双击

curses.BUTTONn_TRIPLE_CLICKED

鼠标按钮 n 被三击

curses.BUTTON_SHIFT

按钮状态更改期间按下 Shift 键

curses.BUTTON_CTRL

按钮状态更改期间按下 Control 键

curses.BUTTON_ALT

按钮状态更改期间按下 Control 键

在 3.10 版本中更改: 如果底层 curses 库提供了 BUTTON5_* 常量,则现在会公开这些常量。

下表列出了预定义的颜色

常量

颜色

curses.COLOR_BLACK

黑色

curses.COLOR_BLUE

蓝色

curses.COLOR_CYAN

青色(淡绿蓝色)

curses.COLOR_GREEN

绿色

curses.COLOR_MAGENTA

洋红色(紫红色)

curses.COLOR_RED

红色

curses.COLOR_WHITE

白色

curses.COLOR_YELLOW

黄色

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 短划线、竖线和加号绘制。

Textbox 对象

您可以按如下方式实例化一个 Textbox 对象

class curses.textpad.Textbox(win)

返回一个文本框小部件对象。win 参数应该是一个 curses 窗口 对象,文本框将包含在该对象中。文本框的编辑光标最初位于包含窗口的左上角,坐标为 (0, 0)。实例的 stripspaces 标志最初处于启用状态。

Textbox 对象具有以下方法

edit([validator])

这是您通常会使用的入口点。它接受编辑按键,直到输入其中一个终止按键。如果提供了 validator,它必须是一个函数。对于输入的每个按键,它都会以该按键作为参数被调用;命令调度在结果上完成。此方法返回窗口内容作为字符串;窗口中是否包含空格受 stripspaces 属性的影响。

do_command(ch)

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

按键

动作

Control-A

转到窗口的左边缘。

Control-B

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

Control-D

删除光标下的字符。

Control-E

转到右边缘(stripspaces 关闭)或行尾(stripspaces 开启)。

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

此属性是一个标志,用于控制窗口中空格的解释。当它启用时,每行末尾的空格将被忽略;任何将使光标落在末尾空格上的光标移动都将改为移动到该行末尾,并且当收集窗口内容时,将删除末尾的空格。