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 库函数返回错误时引发的异常。
注解
当函数或方法的 x 或 y 参数为可选时,它们默认为当前光标位置。当 attr 为可选时,它默认为 A_NORMAL
。
模块 curses
定义了以下函数
- curses.baudrate()¶
返回终端的输出速度,单位为比特每秒。在软件终端模拟器上,它将有一个固定的高值。包含此函数是出于历史原因;在过去,它被用于编写时间延迟的输出循环,有时也用于根据线路速度更改接口。
- curses.beep()¶
发出短促的提示音。
- curses.can_change_color()¶
返回
True
或False
,取决于程序员是否可以更改终端显示的颜色。
- curses.cbreak()¶
进入 cbreak 模式。在 cbreak 模式(有时称为“稀有”模式)下,正常的 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 程序的控制 tty 的一个属性,而不是由 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)¶
创建并返回一个指向具有给定行数和列数的新 pad 数据结构的指针。将 pad 作为窗口对象返回。
pad 类似于窗口,只是它不受屏幕大小的限制,并且不一定与屏幕的特定部分相关联。当需要一个大窗口,并且一次只有一个窗口的一部分在屏幕上时,可以使用 pad。不会发生 pad 的自动刷新(例如,来自滚动或输入的回显)。pad 的
refresh()
和noutrefresh()
方法需要 6 个参数来指定要显示的 pad 的部分以及用于显示的屏幕上的位置。参数为 pminrow、pmincol、sminrow、smincol、smaxrow、smaxcol;p 参数引用要显示的 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()
例程时,与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()¶
将终端恢复到“shell”模式,如之前通过
def_shell_mode()
保存的那样。
- 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])
使用属性 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
左侧
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)
设置当前光标位置或指定位置
(y, x)
处num个字符的属性。如果未提供 num 或 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()
,编码属性会从父窗口继承。默认情况下,使用当前区域设置编码(请参阅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()
创建的 pad 时,才能指定 6 个可选参数。需要额外的参数来指示 pad 和屏幕的哪一部分参与其中。pminrow 和 pmincol 指定要在 pad 中显示的矩形的左上角。sminrow、smincol、smaxrow 和 smaxcol 指定要在屏幕上显示的矩形的边缘。要在 pad 中显示的矩形的右下角是根据屏幕坐标计算的,因为矩形必须大小相同。两个矩形都必须完全包含在其各自的结构中。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,由带有属性 attr 的字符 ch 组成。
常量¶
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_
开头的整数常量表示。 可用的确切键帽取决于系统。
键常量 |
键 |
---|---|
|
最小键值 |
|
Break 键(不可靠) |
|
下箭头 |
|
上箭头 |
|
左箭头 |
|
右箭头 |
|
Home 键(向上+左箭头) |
|
退格键(不可靠) |
|
功能键。 最多支持 64 个功能键。 |
|
功能键 n 的值 |
|
删除行 |
|
插入行 |
|
删除字符 |
|
插入字符或进入插入模式 |
|
退出插入字符模式 |
|
清除屏幕 |
|
清除到屏幕末尾 |
|
清除到行末 |
|
向前滚动 1 行 |
|
向后(反向)滚动 1 行 |
|
下一页 |
|
上一页 |
|
设置制表符 |
|
清除制表符 |
|
清除所有制表符 |
|
回车或发送(不可靠) |
|
软(部分)重置(不可靠) |
|
重置或硬重置(不可靠) |
|
打印 |
|
Home 向下或底部(左下) |
|
小键盘左上角 |
|
小键盘右上角 |
|
小键盘中心 |
|
小键盘左下角 |
|
小键盘右下角 |
|
反向制表符 |
|
开始 |
|
取消 |
|
关闭 |
|
Cmd (命令) |
|
复制 |
|
创建 |
|
结束 |
|
退出 |
|
查找 |
|
帮助 |
|
标记 |
|
消息 |
|
移动 |
|
下一个 |
|
打开 |
|
选项 |
|
上一个(previous) |
|
重做 |
|
参考(reference) |
|
刷新 |
|
替换 |
|
重启 |
|
恢复 |
|
保存 |
|
Shifted Beg (beginning) (Shift + 开始) |
|
Shifted Cancel (Shift + 取消) |
|
Shifted Command (Shift + 命令) |
|
Shifted Copy (Shift + 复制) |
|
Shifted Create (Shift + 创建) |
|
Shifted Delete char (Shift + 删除字符) |
|
Shifted Delete line (Shift + 删除行) |
|
选择 |
|
Shifted End (Shift + 结束) |
|
Shifted Clear line (Shift + 清除行) |
|
Shifted Exit (Shift + 退出) |
|
Shifted Find (Shift + 查找) |
|
Shifted Help (Shift + 帮助) |
|
Shifted Home (Shift + Home) |
|
Shifted Input (Shift + 输入) |
|
Shifted Left arrow (Shift + 左箭头) |
|
Shifted Message (Shift + 消息) |
|
Shifted Move (Shift + 移动) |
|
Shifted Next (Shift + 下一个) |
|
Shifted Options (Shift + 选项) |
|
Shifted Prev (Shift + 上一个) |
|
Shifted Print (Shift + 打印) |
|
Shifted Redo (Shift + 重做) |
|
Shifted Replace (Shift + 替换) |
|
Shifted Right arrow (Shift + 右箭头) |
|
Shifted Resume (Shift + 恢复) |
|
Shifted Save (Shift + 保存) |
|
Shifted Suspend (Shift + 暂停) |
|
Shifted Undo (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 |
Home |
KEY_HOME |
结束 |
KEY_END |
Page Up |
KEY_PPAGE |
Page Down |
KEY_NPAGE |
下表列出了来自备用字符集的字符。这些字符是从 VT100 终端继承的,通常在 X 终端等软件模拟器上可用。当没有可用的图形时,curses 会退回到粗略的可打印 ASCII 近似值。
注解
这些仅在调用 initscr()
后才可用。
ACS 代码 |
含义 |
---|---|
|
右上角的别名 |
|
实心方块 |
|
方块板 |
|
水平线的别名 |
|
左上角的别名 |
|
顶端T型连接的别名 |
|
底端T型连接 |
|
项目符号 |
|
棋盘格(点画) |
|
向下箭头 |
|
度数符号 |
|
菱形 |
|
大于或等于号 |
|
水平线 |
|
灯笼符号 |
|
向左箭头 |
|
小于或等于号 |
|
左下角 |
|
右下角 |
|
左侧T型连接 |
|
不等于号 |
|
字母 pi |
|
加号或减号 |
|
大加号 |
|
向右箭头 |
|
右侧T型连接 |
|
扫描线 1 |
|
扫描线 3 |
|
扫描线 7 |
|
扫描线 9 |
|
右下角的别名 |
|
垂直线的别名 |
|
右侧T型连接的别名 |
|
左下角的别名 |
|
底部T型连接的别名 |
|
左侧T型连接的别名 |
|
交叉或大加号的别名 |
|
英镑符号 |
|
顶部T型连接 |
|
向上箭头 |
|
左上角 |
|
右上角 |
|
垂直线 |
下表列出了 getmouse()
使用的鼠标按钮常量
鼠标按钮常量 |
含义 |
---|---|
|
鼠标按钮 n 被按下 |
|
鼠标按钮 n 被释放 |
|
鼠标按钮 n 被单击 |
|
鼠标按钮 n 被双击 |
|
鼠标按钮 n 被三击 |
|
按钮状态更改期间按下 Shift 键 |
|
按钮状态更改期间按下 Control 键 |
|
按钮状态更改期间按下 Control 键 |
在 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¶
此属性是一个标志,用于控制窗口中空格的解释。当它启用时,每行末尾的空格将被忽略;任何将使光标落在末尾空格上的光标移动都将改为移动到该行末尾,并且当收集窗口内容时,将删除末尾的空格。