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

在版本 1.6 中进行了更改:添加了对ncurses库的支持并转换为程序包。

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

尽管 curses 在 Unix 环境中使用最广泛,但它的版本可用于 DOS,OS/2 以及可能的其他系统。此扩展模块旨在与 ncurses 的 API 相匹配,ncurses 是在 Linux 和 Unix 的 BSD 变体上托管的开源 curses 库。

Note

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

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

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

See also

  • Module curses.ascii

  • 不管您的区域设置如何,使用 ASCII 字符的 Util。

  • Module curses.panel

  • 面板集扩展,可增加 curses 窗口的深度。

  • Module curses.textpad

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

  • 用 Pythoncurses 编程

  • Andrew Kuchling 和 Eric Raymond 撰写的有关在 Python 上使用 curses 的教程材料。

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

15.11.1. Functions

模块curses定义以下异常:

  • exception curses. error
    • 当 curses 库函数返回错误时引发异常。

Note

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

curses模块定义以下Function:

  • curses. baudrate ( )

    • 以位/秒为单位返回终端的输出速度。在软件终端仿真器上,它将具有固定的高值。出于历史原因被包括在内;在过去,它用于写输出循环以提供时间延迟,并偶尔根据线路速度更改接口。
  • curses. beep ( )

    • 发出短暂的注意声音。
  • curses. can_change_color ( )

    • 根据程序员是否可以更改终端显示的颜色,返回TrueFalse
  • curses. cbreak ( )

    • 进入 cbreak 模式。在 cbreak 模式下(有时称为“稀有”模式),通常的 tty 行缓冲被关闭,并且字符可以被一一读取。但是,与原始模式不同,特殊字符(break,退出,挂起和流控制)在 tty 驱动程序和调用程序上保留其效果。先呼叫raw(),再呼叫cbreak(),将终端置于 cbreak 模式。
  • curses. color_content(* color_number *)

    • 返回颜色为* color_number *的红色,绿色和蓝色(RGB)分量的强度,该强度必须在0COLORS之间。返回一个三 Tuples,其中包含给定颜色的 R,G,B 值,该值将介于0(无分量)和1000(最大分量)之间。
  • curses. color_pair(* color_number *)

    • 返回用于以指定颜色显示文本的属性值。该属性值可以与A_STANDOUTA_REVERSE和其他A_*属性组合。 pair_number()是与此Function相对的对象。
  • curses. curs_set(可见性)

    • 设置光标状态。 可见性可以设置为 0、1 或 2,以表示不可见,正常或非常可见。如果终端支持所请求的可见性,则返回先前的光标状态;否则,返回 0.否则,将引发异常。在许多终端上,“可见”模式是一个下划线光标,而“非常可见”模式是一个块光标。
  • curses. def_prog_mode ( )

    • 将当前的终端模式保存为“程序”模式,即正在运行的程序使用 curses 时的模式。 (与之对应的是“ shell”模式,当程序不受 curses 时.)随后对reset_prog_mode()的调用将恢复该模式。
  • curses. def_shell_mode ( )

    • 将当前的终端模式保存为“Shell”模式,即正在运行的程序未使用 curses 时的模式。 (当程序使用 curses Function时,它的对应项是“程序”模式.)随后对reset_shell_mode()的调用将恢复该模式。
  • curses. delay_output(* ms *)

    • 在输出中插入* ms *毫秒的暂停。
  • curses. doupdate ( )

    • 更新物理屏幕。 curses 库保留两个数据结构,一个代表当前的物理屏幕内容,另一个代表所需的下一个状态的虚拟屏幕。 doupdate()地面会更新物理屏幕以匹配虚拟屏幕。

在窗口上执行了诸如addstr()之类的写操作之后,可以passnoutrefresh()调用来更新虚拟屏幕。正常的refresh()呼叫只是noutrefresh(),后跟doupdate();如果必须更新多个窗口,则可以在所有窗口上发出noutrefresh()调用,然后再发出单个doupdate(),从而可以提高性能并减少屏幕闪烁。

  • curses. echo ( )

    • 进入回显模式。在回显模式下,每个字符 Importing 在 Importing 时都会回显到屏幕上。
  • curses. endwin ( )

    • 取消初始化库,然后使终端返回正常状态。
  • curses. erasechar ( )

    • 返回用户当前的擦除字符。在 Unixos 下,这是 curses 程序的控制 tty 的属性,而不是由 curses 库本身设置的。
  • curses. filter ( )

    • filter()例程(如果使用)必须在调用initscr()之前被调用。结果是,在这些调用期间, LINES设置为 1;清除,杯子,CUD,CUD1,CUU1,CUU 和 VPA 的Function已禁用;并将主字符串设置为 cr 的值。结果是光标被限制在当前行内,屏幕更新也是如此。这可用于启用一次字符行编辑而无需触摸屏幕的其余部分。
  • curses. flash ( )

    • 闪烁屏幕。也就是说,将其更改为反向视频,然后在很短的间隔内将其更改回。有些人更喜欢“可见钟声”,而不是beep()发出的听觉注意 signal。
  • curses. flushinp ( )

    • 刷新所有 Importing 缓冲区。这将丢弃用户已键入但尚未由程序处理的任何预 Importing。
  • curses. getmouse ( )

    • getch()返回KEY_MOUSE以表示鼠标事件后,应调用此方法以检索排队的鼠标事件,表示为 5Tuples(id, x, y, z, bstate)。 * id 是用于区分多个设备的 ID 值,而 x y z 是事件的坐标。 ( z 当前未使用.) bstate 是一个整数值,其位将设置为指示事件的类型,并将为以下一个或多个常量的按位“或”,其中 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 *)

    • pass更早的putwin()调用读取存储在文件中的窗口相关数据。然后,例程使用该数据创建并初始化新窗口,并返回新的窗口对象。
  • curses. has_colors ( )

    • 如果终端可以显示颜色,则返回True;否则否则,返回False
  • curses. has_ic ( )

    • 如果终端具有插入和删除字符Function,则返回True。仅由于历史原因才包含此Function,因为所有现代软件终端仿真器均具有此类Function。
  • curses. has_il ( )

    • 如果终端具有插入和删除行Function,或者可以使用滚动区域模拟它们,则返回True。仅由于历史原因才包含此Function,因为所有现代软件终端仿真器均具有此类Function。
  • curses. has_key(* ch *)

    • 取一个键值* ch *,如果当前终端类型识别出具有该值的键,则返回True
  • curses. halfdelay(十分之一)

    • 用于半延迟模式,与 cbreak 模式类似,因为用户键入的字符可立即用于程序。但是,在阻塞十分之一秒后,如果未键入任何内容,则会引发异常。十分之一的值必须是1255之间的数字。使用nocbreak()退出半延迟模式。
  • curses. init_color(* color_number r g b *)

    • 更改颜色的定义,采用要更改的颜色编号,后跟三个 RGB 值(用于红色,绿色和蓝色分量的数量)。 * color_number *的值必须在0COLORS之间。 * r g b *的每个值都必须在01000之间。使用init_color()时,屏幕上所有出现的该颜色会立即变为新的定义。在大多数终端上,此Function是无操作的;仅当can_change_color()返回1时,它才处于活动状态。
  • curses. init_pair(* pair_number fg bg *)

    • 更改颜色对的定义。它包含三个参数:要更改的颜色对的编号,前景色号和背景色号。 * pair_number *的值必须介于1COLOR_PAIRS - 1之间(0颜色对在黑色上连线为白色,无法更改)。 * fg bg *参数的值必须在0COLORS之间。如果颜色对先前已初始化,则刷新屏幕,并将所有出现的颜色对更改为新的定义。
  • curses. initscr ( )

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

Note

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

  • curses. is_term_resized(* nlines ncols *)

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

    • 如果已调用endwin()(即 curses 库已被初始化),则返回True
  • curses. keyname(* k *)

    • 返回编号为* k *的密钥的名称。生成可打印 ASCII 字符的密钥的名称是密钥的字符。控制键组合的名称是一个由两个字符组成的字符串,该字符串由插入符号和相应的可打印 ASCII 字符组成。 alt 键组合的名称(128–255)是一个字符串,由前缀“ M-”组成,后跟相应的 ASCII 字符的名称。
  • curses. killchar ( )

    • 返回用户当前的行终止符。在 Unixos 下,这是 curses 程序的控制 tty 的属性,而不是由 curses 库本身设置的。
  • curses. longname ( )

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

    • 如果为 1,则允许 Importing8 位字符。如果* yes *为 0,则仅允许使用 7 位字符。
  • curses. mouseinterval(* interval *)

    • 设置按下和释放事件之间可以经过的最长时间(以毫秒为单位),以便将它们识别为单击,然后返回先前的间隔值。默认值为 200 毫秒或一秒的五分之一。
  • curses. mousemask(* mousemask *)

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

    • 睡眠* ms *毫秒。
  • curses. newpad(* nlines ncols *)

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

垫类似于窗口,除了它不受屏幕尺寸的限制,并且不一定与屏幕的特定部分关联。当需要一个大窗口时,可以使用垫板,并且一次只将一部分窗口显示在屏幕上。不会自动刷新打击垫(例如,pass滚动或 Importing 的回声)。便笺簿的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 ( )

    • 进入换行模式。此模式在 Importing 时将 return 键转换为换行符,在输出时将换行转换为 return 和换行符。换行模式最初处于打开状态。
  • curses. nocbreak ( )

    • 退出 cbreak 模式。使用行缓冲返回正常的“煮熟”模式。
  • curses. noecho ( )

    • 退出回显模式。Importing 字符的回显已关闭。
  • curses. nonl ( )

    • 离开换行模式。禁止在 Importing 中将 return 转换为换行,并在输出中禁用将 newline 的低级转换/输出换行(但这不会更改addch('\n')的行为,该行为始终等效于虚拟屏幕上的 return 和换行)。取消平移后,curses 有时会稍微加快垂直运动的速度。同样,它将能够检测到 Importing 上的返回键。
  • curses. noqiflush ( )

    • 当使用noqiflush()例程时,将不会对与 INTR,QUIT 和 SUSP 字符关联的 Importing 和输出队列进行常规刷新。如果要在 signal 处理程序退出后 continue 进行输出(好像没有发生break),则可能要在 signal 处理程序中调用noqiflush()
  • curses. noraw ( )

    • 离开原始模式。使用行缓冲返回正常的“煮熟”模式。
  • curses. pair_content(* pair_number *)

    • 返回一个 Tuples(fg, bg),其中包含请求的颜色对的颜色。 * pair_number *的值必须在1COLOR_PAIRS - 1之间。
  • curses. pair_number(* attr *)

    • 返回由属性值* attr *设置的颜色对的编号。 color_pair()是与此Function相对的对象。
  • curses. putp(* string *)

    • 等效于tputs(str, 1, putchar);发出当前终端的指定 terminfo Function的值。请注意,putp()的输出始终转到标准输出。
  • curses. qiflush([* flag *])

    • 如果* flag False,则效果与调用noqiflush()相同。如果 flag *为True,或者不提供任何参数,则在读取这些控制字符时将刷新队列。
  • curses. raw ( )

    • 进入原始模式。在原始模式下,正常的行缓冲和break,退出,挂起和流控制键的处理将关闭;字符被逐一呈现给 cursesImporting Function。
  • curses. reset_prog_mode ( )

    • 将终端恢复为“编程”模式,如先前def_prog_mode()保存的那样。
  • curses. reset_shell_mode ( )

  • curses. resetty ( )

    • 将终端模式的状态恢复到上一次调用savetty()的状态。
  • curses. resize_term(* nlines ncols *)

    • resizeterm()使用的后端Function,执行大部分工作;调整窗口大小时,resize_term()空白填充扩展的区域。调用应用程序应在这些区域中填充适当的数据。 resize_term()函数try调整所有窗口的大小。但是,由于 Pad 的调用约定,如果不与应用程序进行其他交互,则无法调整它们的大小。
  • curses. resizeterm(* nlines ncols *)

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

    • 将终端模式的当前状态保存在可由resetty()使用的缓冲区中。
  • curses. setsyx(* y x *)

    • 将虚拟屏幕光标设置为* y x 。如果 y x *均为-1,则将请假置位。
  • curses. setupterm([* termstr fd *])

    • 初始化终端。 * termstr *是给出终端名称的字符串;如果Ellipsis,将使用 TERM环境变量的值。 * fd *是任何初始化序列将发送到的文件 Descriptors;如果未提供,将使用sys.stdout的文件 Descriptors。
  • curses. start_color ( )

    • 如果程序员要使用颜色,则必须在调用任何其他颜色操作例程之前调用它。最好在initscr()之后调用此例程。

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

  • curses. termattrs ( )

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

    • 返回环境变量 TERM的值,该值被截断为 14 个字符。
  • curses. tigetflag(* capname *)

    • 返回与 terminfo Function名称* capname 对应的布尔Function的值。如果 capname *不是布尔Function,则返回值-1;如果在终端描述中取消或不存在,则返回0
  • curses. tigetnum(* capname *)

    • 返回与 terminfo Function名称* capname 对应的数字Function的值。如果 capname *不是数字能力,则返回值-2;如果终端描述中取消或不存在该值,则返回-1
  • curses. tigetstr(* capname *)

    • 返回与 terminfo Function名称* capname 对应的字符串Function的值。如果 capname *不是字符串Function,或者在终端描述中被取消或不存在,则返回None
  • curses. tparm(* str * [,* ... *])

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

    • 指定文件 Descriptors* fd 用于预 Importing 检查。如果 fd *为-1,则不进行预 Importing 检查。

curses 库pass在更新屏幕时定期查找预先 Importing 来进行“行突破优化”。如果找到 Importing,并且它来自 tty,则将当前更新推迟到再次刷新或再次调用 doupdate 时,以更快地响应预先 Importing 的命令。此Function允许为预 Importing 检查指定其他文件 Descriptors。

  • curses. unctrl(* ch *)

    • 返回一个字符串,该字符串是字符* ch *的可打印表示形式。控制字符显示为插入符号,后跟该字符,例如^C。打印字符保持原样。
  • curses. ungetch(* ch *)

    • 按* ch *,以便下一个getch()将其返回。

Note

在调用getch()之前,只能按一个* ch *。

  • curses. ungetmouse(* id x y z bstate *)

    • KEY_MOUSE事件推送到 Importing 队列,将给定的状态数据与其关联。
  • curses. use_env(* flag *)

    • 如果使用此函数,则应在调用initscr()或 newterm 之前调用此函数。当* flag *为False时,即使设置了环境变量 LINES COLUMNS(默认使用)或 curses 在窗口中运行(在其中),也会使用 terminfo 数据库中指定的行和列的值如果未设置 LINES COLUMNS,则默认行为是使用窗口大小)。
  • curses. use_default_colors ( )

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

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

15.11.2. 窗口对象

如上面的initscr()newwin()返回的 Window 对象具有以下方法:

  • window. addch(* ch * [,* attr *])

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

    Note

字符表示 C 字符(ASCII 代码),而不是 Python 字符(长度为 1 的字符串)。 (只要文档中提到字符,此 Comments 便是正确的.)内置的ord()便于将字符串传递给代码。

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

Note

在窗口,子窗口或便条纸外书写会引发curses.error。try在窗口,子窗口或填充区的右下角进行写入将导致在打印字符后引发异常。

  • window. addnstr(* str n * [,* attr *])

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

    • (y, x)处使用属性* attr 最多绘制字符串 str n *个字符,从而覆盖先前显示的内容。
  • window. addstr(* str * [,* attr *])

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

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

Note

在窗口,子窗口或便条纸外书写会引发curses.error。try在窗口,子窗口或填充区的右下角进行写入将导致在打印字符串后引发异常。

  • window. attroff(* attr *)

    • 从应用于所有当前窗口写入的“背景”集中删除属性* attr *。
  • window. attron(* attr *)

    • 从“背景”设置中添加属性“ * attr *”应用于所有对当前窗口的写入。
  • window. attrset(* attr *)

    • 将“背景”属性集设置为* attr *。该集合最初为 0(无属性)。
  • window. bkgd(* ch * [,* attr *])

    • 将窗口的 background 属性设置为字符* ch ,并带有 attr *属性。然后将更改应用于该窗口中的每个字符位置:
  • 窗口中每个字符的属性都更改为新的背景属性。

  • 无论以前的背景字符出现在何处,都会更改为新的背景字符。

  • window. bkgdset(* ch * [,* attr *])

    • 设置窗口的背景。窗口的背景由字符和属性的任意组合组成。背景的属性部分与写入窗口中的所有非空白字符组合(或)。背景的字符和属性部分都与空白字符组合在一起。背景成为字符的属性,并pass任何滚动和插入/删除行/字符操作与字符一起移动。
  • window. border([[* ls * [,* rs * [,* ts * [,* bs * [,* tl * [,* tr * [,* bl * [,* br *]]]]]]]] []] )

    • 在窗口边缘周围绘制边框。每个参数都指定用于边框特定部分的字符;有关更多详细信息,请参见下表。字符可以指定为整数或一字符字符串。

Note

任何参数的0值都会使默认字符用于该参数。不能*使用关键字参数。下表列出了默认值:

ParameterDescriptionDefault value
lsLeft sideACS_VLINE
rsRight sideACS_VLINE
tsTopACS_HLINE
bsBottomACS_HLINE
tlUpper-left cornerACS_ULCORNER
trUpper-right cornerACS_URCORNER
blBottom-left cornerACS_LLCORNER
brBottom-right cornerACS_LRCORNER
  • window. box([* vertch horch *])

    • border()相似,但* ls rs 均为 vertch ,而 ts bs 均为 horch *。此Function始终使用默认的转角字符。
  • window. chgat(* attr *)

  • window. chgat(* num attr *)

  • window. chgat(* y x attr *)

  • window. chgat(* y x num attr *)

    • 在当前光标位置或位置(y, x)(如果提供)上设置* num 字符的属性。如果未指定 num *或-1,则将在该行末尾的所有字符上设置该属性。如果提供此Function,则将光标移动到位置(y, x)。将使用touchline()方法触摸更改的行,以便在下一次窗口刷新时重新显示内容。
  • window. clear ( )

    • erase()一样,但是也会导致整个窗口在下次调用refresh()时重新绘制。
  • window. clearok()

    • 如果为 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_y begin_x *相对于窗口的原点,而不是相对于整个屏幕。返回派生窗口的窗口对象。
  • window. echochar(* ch * [,* attr *])

    • 添加具有属性* attr 的字符 ch *,并立即在窗口上调用refresh()
  • window. enclose(* y x *)

    • 测试给定的屏幕相对字符单元格对是否被给定的窗口包围,并返回TrueFalse。对于确定屏幕窗口的哪个子集围住鼠标事件的位置很有用。
  • window. erase ( )

    • 清除窗口。
  • window. getbegyx ( )

    • 返回左上角坐标的 Tuples(y, x)
  • window. getbkgd ( )

    • 返回给定窗口的当前背景字符/属性对。
  • window. getch([* y x *])

    • 得到一个角色。请注意,返回的整数不必必须在 ASCII 范围内:Function键,小键盘键等返回的数字大于 256.在无延迟模式下,如果没有 Importing,则返回-1,否则getch()await 直到按下一个键。
  • window. getkey([* y x *])

    • 获取一个字符,返回一个字符串而不是一个整数,就像getch()一样。Function键,键盘键等返回包含键名称的多字节字符串。在无延迟模式下,如果没有 Importing,则会引发异常。
  • window. getmaxyx ( )

    • 返回窗口的高度和宽度的 Tuples(y, x)
  • window. getparyx ( )

    • 将此窗口相对于其父窗口的起始坐标返回为两个整数变量 y 和 x。如果此窗口没有父窗口,则返回-1, -1
  • window. getstr([* y x *])

    • 从用户读取具有原始行编辑Function的字符串。
  • window. getyx ( )

    • 返回相对于窗口左上角的当前光标位置的 Tuples(y, x)
  • window. hline(* ch n *)

  • window. hline(* y x ch n *)

    • 显示从(y, x)开始的水平线,其长度* n 由字符 ch *组成。
  • window. idcok(* flag *)

    • 如果* flag False,则 curses 不再考虑使用终端的硬件插入/删除字符Function;如果 flag *为True,则启用字符插入和删除。首次初始化 curses 时,默认情况下启用字符插入/删除Function。
  • window. idlok()

    • 如果以等于 1 调用,则curses将try并使用硬件行编辑Function。否则,将禁止插入/删除行。
  • window. immedok(* flag *)

    • 如果* flag *为True,则窗口图像中的任何更改都会自动刷新窗口;否则,窗口图像将自动刷新。您不再需要亲自致电refresh()。但是,由于重复调用 wrefresh,它可能会大大降低性能。默认情况下禁用此选项。
  • window. inch([* y x *])

    • 返回窗口中给定位置的字符。最低的 8 位是适当的字符,较高的位是属性。
  • window. insch(* ch * [,* attr *])

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

    • 用属性* attr (y, x)处绘制字符 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 为零或负数,则插入整个字符串。光标右边的所有字符都将向右移动,而该行上最右边的字符将丢失。光标位置不变(移动到 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()

    • 如果* yes 为 1,则某些键(键盘,Function键)生成的转义序列将由curses解释。如果 yes *为 0,转义序列将保留在 Importing 流中。
  • window. leaveok()

    • 如果* 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 *是1,则getch()将是非阻塞的。
  • window. notimeout()

    • 如果* yes *为1,转义序列将不会超时。

如果* yes *是0,则在几毫秒后,将不解释转义序列,并将其原样保留在 Importing 流中。

  • window. noutrefresh ( )

    • 标记为刷新,但请 await。此Function更新表示窗口所需状态的数据结构,但不强制更新物理屏幕。为此,请致电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. putwin(* file *)

    • 将与窗口关联的所有数据写入提供的文件对象。以后可以使用getwin()函数检索此信息。
  • window. redrawln(* beg num *)

    • 指示从第* beg 行开始的 num *屏幕行已损坏,应该在下一个refresh()调用中完全重绘。
  • window. redrawwin ( )

    • 触摸整个窗口,使其在下一个refresh()调用中完全重绘。
  • 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 *])

    • 向上滚动屏幕或滚动区域行。
  • 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. syncdown ( )

    • 触摸其任何祖先窗口中已触摸的窗口中的每个位置。 refresh()调用了此例程,因此几乎永远不需要手动调用它。
  • window. syncok(* flag *)

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

    • 触摸窗口祖先中在窗口中已更改的所有位置。
  • window. timeout(* delay *)

    • 设置窗口的阻止或非阻止读取行为。如果* delay 为负,则使用阻塞读取(它将无限期 awaitImporting)。如果 delay 为零,则使用无阻塞读取,如果没有 Importing 在 await,则getch()将返回-1.如果 delay 为正,则getch()将阻塞 delay *毫秒,如果在该时间结束时仍然没有 Importing,则返回-1.
  • window. touchline(* start count * [,* changed *])

    • 从* start 行开始,Feign count 行已更改。如果提供了 changed ,它指定是将受影响的行标记为已更改( changed * = 1)还是未更改(* changed * = 0)。
  • window. touchwin ( )

    • 为了进行图形优化,Feign 整个窗口都已更改。
  • window. untouchwin ( )

    • 自上次调用refresh()以来,将窗口中的所有行标记为未更改。
  • window. vline(* ch n *)

  • window. vline(* y x ch n *)

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

15.11.3. Constants

curses模块定义以下数据成员:

  • curses. ERR

    • 一些 curses 例程返回一个整数,例如getch(),失败时返回ERR
  • curses. OK

    • 一些 curses 例程返回一个整数,例如napms(),成功则返回OK
  • curses. version

    • 代表模块当前版本的字符串。也可以作为__version__使用。

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

AttributeMeaning
A_ALTCHARSET备用字符集模式
A_BLINKBlink mode
A_BOLDBold mode
A_DIMDim mode
A_INVIS不可见或空白模式
A_NORMALNormal attribute
A_PROTECTProtected mode
A_REVERSE反转背景和前景色
A_STANDOUTStandout mode
A_UNDERLINEUnderline mode
A_HORIZONTALHorizontal highlight
A_LEFTLeft highlight
A_LOWLow highlight
A_RIGHTRight highlight
A_TOPTop highlight
A_VERTICALVertical highlight
A_CHARTEXT位掩码以提取字符

有几个常量可用于提取某些方法返回的相应属性。

Bit-maskMeaning
A_ATTRIBUTES位掩码以提取属性
A_CHARTEXT位掩码以提取字符
A_COLOR位掩码以提取颜色对字段信息

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

Key constantKey
KEY_MIN最小键值
KEY_BREAK断码(不可靠)
KEY_DOWNDown-arrow
KEY_UPUp-arrow
KEY_LEFTLeft-arrow
KEY_RIGHTRight-arrow
KEY_HOMEHome 键(向左箭头)
KEY_BACKSPACEBackspace (unreliable)
KEY_F0Function键。最多支持 64 个Function键。
KEY_FnFunction键的值* n *
KEY_DLDelete line
KEY_ILInsert line
KEY_DCDelete character
KEY_IC插入字符或进入插入模式
KEY_EIC退出插入字符模式
KEY_CLEARClear screen
KEY_EOS清除到屏幕末尾
KEY_EOL清除到行尾
KEY_SF向前滚动 1 行
KEY_SR向后滚动 1 行(反向)
KEY_NPAGENext page
KEY_PPAGEPrevious page
KEY_STABSet tab
KEY_CTABClear tab
KEY_CATAB清除所有标签
KEY_ENTERImporting 或发送(不可靠)
KEY_SRESET软(部分)重置(不可靠)
KEY_RESET重置或硬重置(不可靠)
KEY_PRINTPrint
KEY_LL下或下(左下)
KEY_A1键盘左上方
KEY_A3键盘右上方
KEY_B2键盘中心
KEY_C1键盘左下
KEY_C3键盘右下角
KEY_BTABBack tab
KEY_BEGBeg (beginning)
KEY_CANCELCancel
KEY_CLOSEClose
KEY_COMMANDCmd (command)
KEY_COPYCopy
KEY_CREATECreate
KEY_ENDEnd
KEY_EXITExit
KEY_FINDFind
KEY_HELPHelp
KEY_MARKMark
KEY_MESSAGEMessage
KEY_MOVEMove
KEY_NEXTNext
KEY_OPENOpen
KEY_OPTIONSOptions
KEY_PREVIOUSPrev (previous)
KEY_REDORedo
KEY_REFERENCERef (reference)
KEY_REFRESHRefresh
KEY_REPLACEReplace
KEY_RESTARTRestart
KEY_RESUMEResume
KEY_SAVESave
KEY_SBEG转移乞求(开始)
KEY_SCANCELShifted Cancel
KEY_SCOMMANDShifted Command
KEY_SCOPYShifted Copy
KEY_SCREATEShifted Create
KEY_SDC移位删除字符
KEY_SDL删除线移动
KEY_SELECTSelect
KEY_SENDShifted End
KEY_SEOL移位清除线
KEY_SEXITShifted Exit
KEY_SFINDShifted Find
KEY_SHELPShifted Help
KEY_SHOMEShifted Home
KEY_SICShifted Input
KEY_SLEFT左移箭头
KEY_SMESSAGEShifted Message
KEY_SMOVEShifted Move
KEY_SNEXTShifted Next
KEY_SOPTIONSShifted Options
KEY_SPREVIOUSShifted Prev
KEY_SPRINTShifted Print
KEY_SREDOShifted Redo
KEY_SREPLACEShifted Replace
KEY_SRIGHT右移箭头
KEY_SRSUMEShifted Resume
KEY_SSAVEShifted Save
KEY_SSUSPENDShifted Suspend
KEY_SUNDOShifted Undo
KEY_SUSPENDSuspend
KEY_UNDOUndo
KEY_MOUSE发生鼠标事件
KEY_RESIZE终端调整大小事件
KEY_MAX最大键值

在 VT100 及其软件仿真(例如 X 终端仿真器)上,通常至少有四个Function键(KEY_F1KEY_F2KEY_F3KEY_F4)可用,并且箭头键以明显的方式 Map 到KEY_UPKEY_DOWNKEY_LEFTKEY_RIGHT。如果您的计算机具有 PC 键盘,则可以安全地使用箭头键和十二个Function键(较旧的 PC 键盘可能只有十个Function键);此外,以下键盘 Map 是标准的:

KeycapConstant
InsertKEY_IC
DeleteKEY_DC
HomeKEY_HOME
EndKEY_END
Page UpKEY_PPAGE
Page DownKEY_NPAGE

下表列出了备用字符集中的字符。这些是从 VT100 终端继承的,通常可在软件仿真(例如 X 终端)上使用。如果没有可用的图形,则 curses 会退回到粗略的可打印 ASCII 近似值上。

Note

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

ACS codeMeaning
ACS_BBSS右上角的备用名称
ACS_BLOCK实心方块
ACS_BOARD正方形板
ACS_BSBS水平线的备用名称
ACS_BSSB左上角的备用名称
ACS_BSSS三通的替代名称
ACS_BTEEbottom tee
ACS_BULLETbullet
ACS_CKBOARD棋盘(点画)
ACS_DARROW向下的箭头
ACS_DEGREEdegree symbol
ACS_DIAMONDdiamond
ACS_GEQUALgreater-than-or-equal-to
ACS_HLINEhorizontal line
ACS_LANTERNlantern symbol
ACS_LARROWleft arrow
ACS_LEQUALless-than-or-equal-to
ACS_LLCORNER左下角
ACS_LRCORNER右下角
ACS_LTEEleft tee
ACS_NEQUALnot-equal sign
ACS_PIletter pi
ACS_PLMINUSplus-or-minus sign
ACS_PLUS大加号
ACS_RARROWright arrow
ACS_RTEEright tee
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_STERLINGpound sterling
ACS_TTEEtop tee
ACS_UARROWup arrow
ACS_ULCORNER左上角
ACS_URCORNER右上角
ACS_VLINEvertical line

下表列出了 sched 义的颜色:

ConstantColor
COLOR_BLACKBlack
COLOR_BLUEBlue
COLOR_CYAN青色(浅绿色蓝色)
COLOR_GREENGreen
COLOR_MAGENTA洋红色(紫红色)
COLOR_REDRed
COLOR_WHITEWhite
COLOR_YELLOWYellow

15.12. curses.textpad — curses 程序的文本 Importing 小部件

1.6 版中的新Function。

curses.textpad模块提供了一个Textbox类,该类可在 curses 窗口中处理基本文本编辑,并支持类似于 Emacs 的一组键绑定(因此也包含 Netscape Navigator,BBedit 6.x,FrameMaker 和许多其他程序)。该模块还提供了矩形绘图Function,可用于为文本框定框或用于其他目的。

curses.textpad模块定义以下Function:

  • curses.textpad. rectangle(* win uly ulx lry lrx *)
    • 画一个矩形。第一个参数必须是一个窗口对象;其余参数是相对于该窗口的坐标。第二个和第三个参数是要绘制的矩形的左上角的 y 和 x 坐标;第四个和第五个参数是右下角的 y 和 x 坐标。将使用 VT100/IBM PC 形式的字符在终端上绘制矩形,以使其成为可能(包括 xterm 和大多数其他软件终端仿真器)。否则,它将使用 ASCII 破折号,竖线和加号进行绘制。

15.12.1. Literals 框对象

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

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

Textbox对象具有以下方法:

  • edit([[validator *])

    • 这是您通常使用的入口点。它接受编辑键击,直到 Importing 了一个终止键击。如果提供了* validator *,则它必须是一个函数。对于以击键作为参数 Importing 的每个击键,都会调用此方法。命令分派在结果上完成。该方法以字符串形式返回窗口内容。 stripspaces属性会影响是否在窗口中包含空白。
  • do_command(* ch *)

    • 处理单个命令按键。以下是受支持的特殊按键:
KeystrokeAction
Control-A转到窗口的左边缘。
Control-B向左移动光标,并在适当的情况下换行到上一行。
Control-D删除光标下的字符。
Control-E转到右边缘(Stripspaces 关闭)或行尾(Stripspaces 打开)。
Control-F向右光标,在适当的时候换行到下一行。
Control-G终止,返回窗口内容。
Control-H向后删除字符。
Control-J如果窗口是 1 行,则终止,否则插入换行符。
Control-K如果行为空,请将其删除,否则清除到行尾。
Control-LRefresh screen.
Control-N光标向下;向下移动一行。
Control-O在光标位置插入空白行。
Control-P光标向上;向上移动一行。

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

ConstantKeystroke
KEY_LEFTControl-B
KEY_RIGHTControl-F
KEY_UPControl-P
KEY_DOWNControl-N
KEY_BACKSPACEControl-h

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

  • gather ( )

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

    • 此属性是一个标志,用于控制窗口中空白的解释。启用时,每行的尾随空白将被忽略;它将使光标停留在尾随空白上的任何光标运动都将转到该行的末尾,并且在收集窗口内容时将尾随空白删除。