curses
- 用于字符单元显示的终端处理¶
源代码: Lib/curses
curses
模块提供了一个 curses 库的接口,curses 库是用于可移植高级终端处理的事实标准。
虽然 curses 在 Unix 环境中使用最广泛,但 Windows、DOS 以及其他系统也提供了相应的版本。此扩展模块旨在匹配 ncurses 的 API,ncurses 是一个托管在 Linux 和 BSD 变体 Unix 上的开源 curses 库。
注意
每当文档提到*字符*时,它可以指定为整数、单字符 Unicode 字符串或单字节字节字符串。
每当文档提到*字符串*时,它可以指定为 Unicode 字符串或字节字符串。
另请参阅
- 模块
curses.ascii
用于处理 ASCII 字符的实用程序,与您的区域设置无关。
- 模块
curses.panel
一个面板堆栈扩展,为 curses 窗口增加了深度。
- 模块
curses.textpad
curses 的可编辑文本小部件,支持类似 Emacs 的绑定。
- 使用 Python 进行 Curses 编程
Andrew Kuchling 和 Eric Raymond 编写的关于将 curses 与 Python 结合使用的教程材料。
函数¶
模块 curses
定义了以下异常
- 异常 curses.error¶
当 curses 库函数返回错误时引发的异常。
注意
每当函数或方法的 x 或 y 参数可选时,它们默认为当前光标位置。每当 attr 可选时,它默认为 A_NORMAL
。
模块 curses
定义了以下函数
- curses.baudrate()¶
以每秒位数返回终端的输出速度。在软件终端模拟器上,它将具有固定的高值。出于历史原因而包含;在以前,它被用于为时间延迟编写输出循环,偶尔也用于根据线路速度更改接口。
- curses.beep()¶
发出短暂的提示音。
- curses.can_change_color()¶
返回
True
或False
,具体取决于程序员是否可以更改终端显示的颜色。
- curses.cbreak()¶
进入 cbreak 模式。在 cbreak 模式(有时称为“rare”模式)下,正常的 tty 行缓冲被关闭,并且可以逐个读取字符。但是,与原始模式不同,特殊字符(中断、退出、挂起和流控制)在 tty 驱动程序和调用程序上保留其效果。先调用
raw()
然后调用cbreak()
会使终端处于 cbreak 模式。
- curses.color_content(color_number)¶
返回颜色 color_number 中红色、绿色和蓝色 (RGB) 分量的强度,该颜色必须介于
0
和COLORS - 1
之间。返回一个 3 元组,包含给定颜色的 R、G、B 值,这些值将在0
(无分量)和1000
(最大分量)之间。
- curses.color_pair(pair_number)¶
返回以指定颜色对显示文本的属性值。仅支持前 256 种颜色对。此属性值可以与
A_STANDOUT
、A_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 程序的控制终端的属性,而不是由 curses 库本身设置的。
- curses.filter()¶
如果使用
filter()
例程,则必须在调用initscr()
之前调用。其效果是,在这些调用期间,LINES
设置为1
;禁用功能clear
、cup
、cud
、cud1
、cuu1
、cuu
、vpa
;并将home
字符串设置为cr
的值。其效果是光标被限制在当前行,屏幕更新也是如此。这可以用于启用一次一个字符的行编辑,而无需触及屏幕的其余部分。
- curses.flushinp()¶
刷新所有输入缓冲区。这将丢弃用户已键入但程序尚未处理的所有预输入内容。
- curses.getmouse()¶
在
getch()
返回KEY_MOUSE
以指示鼠标事件后,应调用此方法来检索排队的鼠标事件,表示为 5 元组(id, x, y, z, bstate)
。id 是用于区分多个设备的 ID 值,x、y、z 是事件的坐标。(z 当前未使用。)bstate 是一个整数值,其位将被设置以指示事件的类型,并且将是一个或多个以下常量的按位或,其中 n 是从 1 到 5 的按钮编号:BUTTONn_PRESSED
、BUTTONn_RELEASED
、BUTTONn_CLICKED
、BUTTONn_DOUBLE_CLICKED
、BUTTONn_TRIPLE_CLICKED
、BUTTON_SHIFT
、BUTTON_CTRL
、BUTTON_ALT
。在 3.10 版更改: 如果底层 curses 库提供,则现在会公开
BUTTON5_*
常量。
- 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 的值必须介于
1
和255
之间。使用nocbreak()
退出半延迟模式。
- curses.init_color(color_number, r, g, b)¶
更改颜色的定义,采用要更改的颜色编号,后跟三个 RGB 值(分别表示红色、绿色和蓝色分量的数量)。 color_number 的值必须介于
0
和COLORS - 1
之间。 r、g、b 中的每一个都必须是介于0
和1000
之间的值。使用init_color()
时,屏幕上该颜色的所有实例都会立即更改为新定义。此函数在大多数终端上是无操作的;仅当can_change_color()
返回True
时,它才处于活动状态。
- curses.init_pair(pair_number, fg, bg)¶
更改颜色对的定义。它采用三个参数:要更改的颜色对的编号、前景色编号和背景色编号。 pair_number 的值必须介于
1
和COLOR_PAIRS - 1
之间(0
颜色对连接到黑色上的白色,无法更改)。 fg 和 bg 参数的值必须介于0
和COLORS - 1
之间,或者在调用use_default_colors()
后为-1
。如果之前已初始化颜色对,则会刷新屏幕,并且该颜色对的所有实例都将更改为新定义。
- curses.is_term_resized(nlines, ncols)¶
如果
resize_term()
将修改窗口结构,则返回True
,否则返回False
。
- curses.keyname(k)¶
以字节对象形式返回编号为 k 的键的名称。生成可打印 ASCII 字符的键的名称是该键的字符。控制键组合的名称是一个两字节的字节对象,由一个插入符号 (
b'^'
) 和相应的可打印 ASCII 字符组成。 Alt 键组合 (128–255) 的名称是一个字节对象,由前缀b'M-'
和相应的 ASCII 字符的名称组成。
- curses.killchar()¶
以一个字节的字节对象形式返回用户当前的行删除字符。在 Unix 操作系统下,这是 curses 程序的控制 tty 的属性,而不是由 curses 库本身设置的。
- curses.meta(flag)¶
如果 flag 为
True
,则允许输入 8 位字符。 如果 flag 为False
,则仅允许 7 位字符。
- curses.mouseinterval(interval)¶
设置按下和释放事件之间可以经过的最大时间(以毫秒为单位),以便将它们识别为单击,并返回之前的间隔值。 默认值为 200 毫秒,即五分之一秒。
- curses.mousemask(mousemask)¶
设置要报告的鼠标事件,并返回一个元组
(availmask, oldmask)
。 availmask 指示可以报告指定的鼠标事件中的哪些;如果完全失败,则返回0
。 oldmask 是给定窗口的鼠标事件掩码的先前值。 如果从未调用此函数,则永远不会报告鼠标事件。
- curses.napms(ms)¶
休眠 ms 毫秒。
- curses.newpad(nlines, ncols)¶
创建一个新填充数据结构的指针,并返回该指针,该数据结构具有给定的行数和列数。 返回一个作为窗口对象的填充。
填充类似于窗口,不同之处在于它不受屏幕大小的限制,并且不一定与屏幕的特定部分相关联。 当需要一个大窗口,并且一次只显示窗口的一部分时,可以使用填充。 不会自动刷新填充(例如,滚动或输入回显)。 填充的
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 模式。 返回到具有行缓冲的正常“熟”模式。
- curses.noecho()¶
退出回显模式。 关闭输入字符的回显。
- curses.nonl()¶
退出换行模式。 禁用在输入时将回车符转换为换行符,并禁用在输出时将换行符转换为换行符/回车符的低级转换(但这不会更改
addch('\n')
的行为,该行为始终在虚拟屏幕上执行等效的回车和换行)。 禁用转换后,curses 有时可以稍微加快垂直移动速度; 此外,它将能够检测输入时的回车键。
- curses.noqiflush()¶
使用
noqiflush()
例程时,将不会执行与INTR
、QUIT
和SUSP
字符关联的输入和输出队列的正常刷新。 如果希望在处理程序退出后输出像未发生中断一样继续,则可能希望在信号处理程序中调用noqiflush()
。
- curses.noraw()¶
退出原始模式。 返回到具有行缓冲的正常“熟”模式。
- curses.pair_content(pair_number)¶
返回一个元组
(fg, bg)
,其中包含请求的颜色对的颜色。 pair_number 的值必须介于0
和COLOR_PAIRS - 1
之间。
- curses.pair_number(attr)¶
返回由属性值 attr 设置的颜色对的编号。
color_pair()
是此函数的对应函数。
- curses.qiflush([flag])¶
如果 flag 为
False
,则效果与调用noqiflush()
相同。如果 flag 为True
,或未提供参数,则在读取这些控制字符时将刷新队列。
- curses.raw()¶
进入原始模式。在原始模式下,将关闭正常的行缓冲和中断、退出、挂起和流控制键的处理;字符将逐个呈现给 curses 输入函数。
- curses.reset_prog_mode()¶
将终端恢复到
def_prog_mode()
先前保存的“程序”模式。
- curses.reset_shell_mode()¶
将终端恢复到
def_shell_mode()
先前保存的“shell”模式。
- curses.resize_term(nlines, ncols)¶
resizeterm()
使用的后端函数,执行大部分工作;调整窗口大小时,resize_term()
会用空格填充扩展的区域。调用应用程序应使用适当的数据填充这些区域。resize_term()
函数尝试调整所有窗口的大小。但是,由于 pad 的调用约定,如果没有与应用程序的额外交互,则无法调整它们的大小。
- curses.resizeterm(nlines, ncols)¶
将标准窗口和当前窗口的大小调整为指定的尺寸,并调整 curses 库使用的其他记录窗口尺寸的簿记数据(特别是 SIGWINCH 处理程序)。
- 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.setupterm(term=None, fd=-1)¶
初始化终端。term 是一个字符串,给出终端名称,或者为
None
;如果省略或为None
,则将使用TERM
环境变量的值。fd 是将向其发送任何初始化序列的文件描述符;如果未提供或为-1
,则将使用sys.stdout
的文件描述符。
- curses.start_color()¶
如果程序员想要使用颜色,则必须先调用此例程,然后再调用任何其他颜色操作例程。最佳做法是在
initscr()
之后立即调用此例程。start_color()
初始化八种基本颜色(黑、红、绿、黄、蓝、洋红、青和白),并在curses
模块中初始化两个全局变量,COLORS
和COLOR_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.use_env(flag)¶
如果使用此函数,则应在调用
initscr()
或 newterm 之前调用。当 *flag* 为False
时,将使用 terminfo 数据库中指定的行数和列数,即使设置了环境变量LINES
和COLUMNS
(默认使用),或者 curses 在窗口中运行(在这种情况下,如果未设置LINES
和COLUMNS
,则默认行为是使用窗口大小)。
- 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])
在
(y, x)
处绘制字符 *ch*,并带有属性 *attr*,覆盖之前在该位置绘制的任何字符。默认情况下,字符位置和属性是窗口对象的当前设置。注意
在窗口、子窗口或填充区之外写入会引发
curses.error
。尝试写入窗口、子窗口或填充区的右下角将在打印字符后引发异常。
- window.addnstr(str, n[, attr])¶
- window.addnstr(y, x, str, n[, attr])
在
(y, x)
处绘制字符串 *str* 的最多 *n* 个字符,并带有属性 *attr*,覆盖之前显示的任何内容。
- window.addstr(str[, attr])¶
- window.addstr(y, x, str[, attr])
在
(y, x)
处绘制字符串 *str*,并带有属性 *attr*,覆盖之前显示的任何内容。注意
在窗口、子窗口或填充区之外写入会引发
curses.error
。尝试写入窗口、子窗口或填充区的右下角将在打印字符串后引发异常。此 Python 模块的后端 ncurses 中的一个错误在调整窗口大小时可能会导致段错误。这已在 ncurses-6.1-20190511 中修复。如果您使用的是较早版本的 ncurses,则可以通过不在调用
addstr()
时使用嵌入了换行符的 *str* 来避免触发此错误。而是为每一行分别调用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
左侧
rs
右侧
ts
顶部
bs
底部
tl
左上角
tr
右上角
bl
左下角
br
右下角
- window.chgat(attr)¶
- window.chgat(num, attr)
- window.chgat(y, x, attr)
- window.chgat(y, x, num, attr)
设置当前光标位置处 num 个字符的属性,如果提供,则设置位置
(y, x)
处的属性。如果未给出 num 或为-1
,则该属性将设置在从当前位置到行尾的所有字符上。如果提供,此函数会将光标移动到位置(y, x)
。更改后的行将使用touchline()
方法进行标记,以便在下一次窗口刷新时重新显示内容。
- 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_y 和 begin_x 是相对于窗口原点的,而不是相对于整个屏幕的。返回派生窗口的窗口对象。
- window.enclose(y, x)¶
测试给定的屏幕相对字符单元坐标对是否被给定窗口包围,返回
True
或False
。这对于确定哪些屏幕窗口子集包含鼠标事件的位置非常有用。在 3.10 版更改: 之前返回
1
或0
而不是True
或False
。
- window.encoding¶
用于对方法参数(Unicode 字符串和字符)进行编码的编码。例如,使用
window.subwin()
创建子窗口时,encoding 属性将从父窗口继承。默认情况下,使用当前的区域设置编码(请参阅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)¶
如果 flag 为
False
,则 curses 不再考虑使用终端的硬件插入/删除字符功能;如果 flag 为True
,则启用字符插入和删除功能。首次初始化 curses 时,默认启用字符插入/删除功能。
- window.immedok(flag)¶
如果 flag 为
True
,则窗口图像中的任何更改都会自动导致窗口刷新;您不再需要自己调用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.keypad(flag)¶
如果 flag 为
True
,则某些键(键盘、功能键)生成的转义序列将由curses
解释。如果 flag 为False
,则转义序列将按原样保留在输入流中。
- window.leaveok(flag)¶
如果 flag 为
True
,则光标在更新时保持原位,而不是位于“光标位置”。这将尽可能减少光标移动。如果可能,光标将变为不可见。如果 flag 为
False
,则光标在更新后将始终位于“光标位置”。
- 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.notimeout(flag)¶
如果 *flag* 为
True
,则转义序列不会超时。如果 *flag* 为
False
,则几毫秒后,转义序列将不会被解释,并将按原样保留在输入流中。
- 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.refresh([pminrow, pmincol, sminrow, smincol, smaxrow, smaxcol])¶
立即更新显示(将实际屏幕与之前的绘图/删除方法同步)。
仅当窗口是使用
newpad()
创建的填充区时,才能指定 6 个可选参数。需要附加参数来指示填充区和屏幕的哪些部分参与其中。*pminrow* 和 *pmincol* 指定要显示在填充区中的矩形的左上角。*sminrow*、*smincol*、*smaxrow* 和 *smaxcol* 指定要显示在屏幕上的矩形的边缘。要显示在填充区中的矩形的右下角是根据屏幕坐标计算的,因为矩形的大小必须相同。两个矩形必须完全包含在它们各自的结构中。*pminrow*、*pmincol*、*sminrow* 或 *smincol* 的负值将被视为零。
- window.resize(nlines, ncols)¶
重新分配 curses 窗口的存储空间,以将其维度调整为指定的值。如果任一维度大于当前值,则窗口的数据将填充具有当前背景渲染(由
bkgdset()
设置)的空格。
- window.scroll([lines=1])¶
将屏幕或滚动区域向上滚动 *lines* 行。
- window.scrollok(flag)¶
控制当窗口的光标移动到窗口或滚动区域边缘时会发生什么,这可能是由于在最后一行执行换行操作或键入最后一行的最后一个字符造成的。如果 *flag* 为
False
,则光标停留在最后一行。如果 *flag* 为True
,则窗口向上滚动一行。请注意,为了在终端上获得物理滚动效果,还需要调用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.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.vline(ch, n[, attr])¶
- window.vline(y, x, ch, n[, attr])
显示一条从
(y, x)
开始、长度为 *n* 的垂直线,该线由字符 *ch* 组成,属性为 *attr*。
常量¶
curses
模块定义以下数据成员
- curses.version¶
- curses.__version__¶
表示模块当前版本的字节对象。
- curses.ncurses_version¶
一个命名元组,包含 ncurses 库版本号的三个组成部分:*major*、*minor* 和 *patch*。所有值均为整数。也可以通过名称访问这些组成部分,因此
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()
更新。
一些常量可用于指定字符单元格属性。可用的确切常量取决于系统。
属性 |
含义 |
---|---|
|
备用字符集模式 |
|
闪烁模式 |
|
粗体模式 |
|
暗淡模式 |
|
不可见或空白模式 |
|
斜体模式 |
|
普通属性 |
|
保护模式 |
|
反转背景和前景颜色 |
|
突出显示模式 |
|
下划线模式 |
|
水平高亮 |
|
左侧高亮 |
|
低亮度 |
|
右侧高亮 |
|
顶部高亮 |
|
垂直高亮 |
3.7 版新增: 添加了 A_ITALIC
。
可以使用多个常量来提取某些方法返回的相应属性。
位掩码 |
含义 |
---|---|
|
用于提取属性的位掩码 |
|
用于提取字符的位掩码 |
|
用于提取颜色对字段信息的位掩码 |
键通过以 KEY_
开头的名称的整型常量来引用。可用的确切键帽取决于系统。
键常量 |
键 |
---|---|
|
最小键值 |
|
中断键(不可靠) |
|
向下箭头 |
|
向上箭头 |
|
向左箭头 |
|
向右箭头 |
|
Home 键(向上+向左箭头) |
|
退格键(不可靠) |
|
功能键。最多支持 64 个功能键。 |
|
功能键 n 的值 |
|
删除行 |
|
插入行 |
|
删除字符 |
|
插入字符或进入插入模式 |
|
退出插入字符模式 |
|
清屏 |
|
清除到屏幕末尾 |
|
清除到行尾 |
|
向前滚动 1 行 |
|
向后滚动 1 行(反向) |
|
下一页 |
|
上一页 |
|
设置制表符 |
|
清除制表符 |
|
清除所有制表符 |
|
回车或发送(不可靠) |
|
软(部分)重置(不可靠) |
|
重置或硬重置(不可靠) |
|
打印 |
|
向下翻页或底部(左下) |
|
小键盘左上角 |
|
小键盘右上角 |
|
小键盘中心 |
|
小键盘左下角 |
|
小键盘右下角 |
|
后退一个制表符 |
|
开头 |
|
取消 |
|
关闭 |
|
命令 |
|
复制 |
|
创建 |
|
结束 |
|
退出 |
|
查找 |
|
帮助 |
|
标记 |
|
消息 |
|
移动 |
|
下一个 |
|
打开 |
|
选项 |
|
上一步(前一个) |
|
重做 |
|
引用(参考) |
|
刷新 |
|
替换 |
|
重启 |
|
恢复 |
|
保存 |
|
Shift + 开始 |
|
Shift + 取消 |
|
Shift + 命令 |
|
Shift + 复制 |
|
Shift + 创建 |
|
Shift + 删除字符 |
|
Shift + 删除行 |
|
选择 |
|
Shift + 结束 |
|
Shift + 清除行 |
|
Shift + 退出 |
|
Shift + 查找 |
|
Shift + 帮助 |
|
Shift + 主页 |
|
Shift + 输入 |
|
Shift + 左箭头 |
|
Shift + 消息 |
|
Shift + 移动 |
|
Shift + 下一步 |
|
Shift + 选项 |
|
Shift + 上一步 |
|
Shift + 打印 |
|
Shift + 重做 |
|
Shift + 替换 |
|
Shift + 右箭头 |
|
Shift + 恢复 |
|
Shift + 保存 |
|
Shift + 挂起 |
|
Shift + 撤销 |
|
挂起 |
|
撤销 |
|
鼠标事件已发生 |
|
终端大小调整事件 |
|
最大键值 |
在 VT100 及其软件仿真(例如 X 终端仿真器)上,通常至少有四个功能键(KEY_F1
、KEY_F2
、KEY_F3
、KEY_F4
)可用,并且箭头键以显而易见的方式映射到 KEY_UP
、KEY_DOWN
、KEY_LEFT
和 KEY_RIGHT
。如果您的机器有 PC 键盘,则可以安全地预期箭头键和十二个功能键(较旧的 PC 键盘可能只有十个功能键);此外,以下键盘映射是标准的
键帽 |
常量 |
---|---|
插入 |
KEY_IC |
删除 |
KEY_DC |
主页 |
KEY_HOME |
结束 |
KEY_END |
向上翻页 |
KEY_PPAGE |
向下翻页 |
KEY_NPAGE |
下表列出了备用字符集中的字符。 这些字符继承自 VT100 终端,通常在 X 终端等软件仿真中可用。 当没有可用的图形时,curses 会使用粗略的可打印 ASCII 字符进行近似。
注意
这些字符仅在调用 initscr()
后才可用。
ACS 代码 |
含义 |
---|---|
|
右上角的别名 |
|
实心方形块 |
|
方形板 |
|
水平线的别名 |
|
左上角的别名 |
|
上三通的别名 |
|
下三通 |
|
项目符号 |
|
棋盘(阴影线) |
|
向下箭头 |
|
度数符号 |
|
菱形 |
|
大于等于 |
|
水平线 |
|
灯笼符号 |
|
左箭头 |
|
小于等于 |
|
左下角 |
|
右下角 |
|
左三通 |
|
不等于号 |
|
字母 π |
|
正负号 |
|
大加号 |
|
右箭头 |
|
右三通 |
|
扫描线 1 |
|
扫描线 3 |
|
扫描线 7 |
|
扫描线 9 |
|
右下角的别名 |
|
垂直线的别名 |
|
右三通的别名 |
|
左下角的别名 |
|
下三通的别名 |
|
左三通的别名 |
|
交叉或大加号的别名 |
|
英镑符号 |
|
上三通 |
|
向上箭头 |
|
左上角 |
|
右上角 |
|
垂直线 |
下表列出了 getmouse()
使用的鼠标按钮常量
鼠标按钮常量 |
含义 |
---|---|
|
鼠标按钮 n 被按下 |
|
鼠标按钮 n 被释放 |
|
鼠标按钮 n 被单击 |
|
鼠标按钮 n 被双击 |
|
鼠标按钮 n 被三击 |
|
按钮状态改变时按下了 Shift 键 |
|
按钮状态改变时按下了 Ctrl 键 |
|
按钮状态改变时按下了 Ctrl 键 |
在 3.10 版更改: 如果底层 curses 库提供,则现在会公开 BUTTON5_*
常量。
下表列出了预定义的颜色
常量 |
颜色 |
---|---|
|
黑色 |
|
蓝色 |
|
青色(浅绿色蓝) |
|
绿色 |
|
洋红色(紫红色) |
|
红色 |
|
白色 |
|
黄色 |
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
光标向上移动;向上移动一行。
如果光标位于无法移动的边缘,则移动操作无效。在可能的情况下,支持以下同义词
常量
击键
Control-B
Control-F
Control-P
Control-N
Control-h
所有其他按键都被视为插入给定字符并向右移动(自动换行)的命令。
- gather()¶
以字符串形式返回窗口内容;窗口中是否包含空格受
stripspaces
成员的影响。
- stripspaces¶
此属性是一个标志,用于控制窗口中空格的解释。当它开启时,每行尾部的空格将被忽略;任何将光标移动到尾部空格的光标移动都会转到该行的末尾,并且在收集窗口内容时会删除尾部空格。