On this page
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。
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
( )- 根据程序员是否可以更改终端显示的颜色,返回
True
或False
。
- 根据程序员是否可以更改终端显示的颜色,返回
curses.
cbreak
( )curses.
color_content
(* color_number *)- 返回颜色为* color_number *的红色,绿色和蓝色(RGB)分量的强度,该强度必须在
0
和COLORS
之间。返回一个三 Tuples,其中包含给定颜色的 R,G,B 值,该值将介于0
(无分量)和1000
(最大分量)之间。
- 返回颜色为* color_number *的红色,绿色和蓝色(RGB)分量的强度,该强度必须在
curses.
color_pair
(* color_number *)- 返回用于以指定颜色显示文本的属性值。该属性值可以与
A_STANDOUT
,A_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
( )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_PRESSED
,BUTTONn_RELEASED
,BUTTONn_CLICKED
,BUTTONn_DOUBLE_CLICKED
,BUTTONn_TRIPLE_CLICKED
,BUTTON_SHIFT
,BUTTON_CTRL
,BUTTON_ALT
。
curses.
getsyx
( )- 在 y 和 x 中返回虚拟屏幕光标的当前坐标。如果 Leaveok 当前为 true,则返回-1,-1.
curses.
getwin
(* file *)- pass更早的
putwin()
调用读取存储在文件中的窗口相关数据。然后,例程使用该数据创建并初始化新窗口,并返回新的窗口对象。
- pass更早的
curses.
has_colors
( )- 如果终端可以显示颜色,则返回
True
;否则否则,返回False
。
- 如果终端可以显示颜色,则返回
curses.
has_ic
( )- 如果终端具有插入和删除字符Function,则返回
True
。仅由于历史原因才包含此Function,因为所有现代软件终端仿真器均具有此类Function。
- 如果终端具有插入和删除字符Function,则返回
curses.
has_il
( )- 如果终端具有插入和删除行Function,或者可以使用滚动区域模拟它们,则返回
True
。仅由于历史原因才包含此Function,因为所有现代软件终端仿真器均具有此类Function。
- 如果终端具有插入和删除行Function,或者可以使用滚动区域模拟它们,则返回
curses.
has_key
(* ch *)- 取一个键值* ch *,如果当前终端类型识别出具有该值的键,则返回
True
。
- 取一个键值* ch *,如果当前终端类型识别出具有该值的键,则返回
curses.
halfdelay
(十分之一)- 用于半延迟模式,与 cbreak 模式类似,因为用户键入的字符可立即用于程序。但是,在阻塞十分之一秒后,如果未键入任何内容,则会引发异常。十分之一的值必须是
1
和255
之间的数字。使用nocbreak()退出半延迟模式。
- 用于半延迟模式,与 cbreak 模式类似,因为用户键入的字符可立即用于程序。但是,在阻塞十分之一秒后,如果未键入任何内容,则会引发异常。十分之一的值必须是
curses.
init_color
(* color_number , r , g , b *)- 更改颜色的定义,采用要更改的颜色编号,后跟三个 RGB 值(用于红色,绿色和蓝色分量的数量)。 * color_number *的值必须在
0
和COLORS
之间。 * r , g , b *的每个值都必须在0
和1000
之间。使用init_color()时,屏幕上所有出现的该颜色会立即变为新的定义。在大多数终端上,此Function是无操作的;仅当can_change_color()返回1
时,它才处于活动状态。
- 更改颜色的定义,采用要更改的颜色编号,后跟三个 RGB 值(用于红色,绿色和蓝色分量的数量)。 * color_number *的值必须在
curses.
init_pair
(* pair_number , fg , bg *)- 更改颜色对的定义。它包含三个参数:要更改的颜色对的编号,前景色号和背景色号。 * pair_number *的值必须介于
1
和COLOR_PAIRS - 1
之间(0
颜色对在黑色上连线为白色,无法更改)。 * fg 和 bg *参数的值必须在0
和COLORS
之间。如果颜色对先前已初始化,则刷新屏幕,并将所有出现的颜色对更改为新的定义。
- 更改颜色对的定义。它包含三个参数:要更改的颜色对的编号,前景色号和背景色号。 * pair_number *的值必须介于
curses.
initscr
( )- 初始化库。返回代表整个屏幕的
WindowObject
。
- 初始化库。返回代表整个屏幕的
Note
如果打开终端时发生错误,则底层的 curses 库可能会导致解释器退出。
curses.
is_term_resized
(* nlines , ncols *)- 如果resize_term()将修改窗口结构,则返回
True
,否则返回False
。
- 如果resize_term()将修改窗口结构,则返回
curses.
isendwin
( )- 如果已调用endwin()(即 curses 库已被初始化),则返回
True
。
- 如果已调用endwin()(即 curses 库已被初始化),则返回
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 *是给定窗口的鼠标事件掩码的先前值。如果从未调用此函数,则不会报告任何鼠标事件。
- 设置要报告的鼠标事件,并返回一个 Tuples
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 上的返回键。
- 离开换行模式。禁止在 Importing 中将 return 转换为换行,并在输出中禁用将 newline 的低级转换/输出换行(但这不会更改
curses.
noqiflush
( )- 当使用noqiflush()例程时,将不会对与 INTR,QUIT 和 SUSP 字符关联的 Importing 和输出队列进行常规刷新。如果要在 signal 处理程序退出后 continue 进行输出(好像没有发生break),则可能要在 signal 处理程序中调用noqiflush()。
curses.
noraw
( )- 离开原始模式。使用行缓冲返回正常的“煮熟”模式。
curses.
pair_content
(* pair_number *)- 返回一个 Tuples
(fg, bg)
,其中包含请求的颜色对的颜色。 * pair_number *的值必须在1
和COLOR_PAIRS - 1
之间。
- 返回一个 Tuples
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
,或者不提供任何参数,则在读取这些控制字符时将刷新队列。
- 如果* flag 为
curses.
raw
( )- 进入原始模式。在原始模式下,正常的行缓冲和break,退出,挂起和流控制键的处理将关闭;字符被逐一呈现给 cursesImporting Function。
curses.
reset_prog_mode
( )- 将终端恢复为“编程”模式,如先前def_prog_mode()保存的那样。
curses.
reset_shell_mode
( )- 将终端恢复为先前由def_shell_mode()保存的“Shell”模式。
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。
- 初始化终端。 * termstr *是给出终端名称的字符串;如果Ellipsis,将使用
curses.
start_color
( )- 如果程序员要使用颜色,则必须在调用任何其他颜色操作例程之前调用它。最好在initscr()之后调用此例程。
start_color()初始化八种基本颜色(黑色,红色,绿色,黄色,蓝色,洋红色,青色和白色),以及curses模块中的两个全局变量COLORS
和COLOR_PAIRS
,其中包含终端可以设置的最大颜色数和颜色对。支持。还将终端上的颜色恢复为刚打开终端时的颜色。
curses.
termattrs
( )- 返回终端支持的所有视频属性的逻辑或。当 curses 程序需要完全控制屏幕外观时,此信息很有用。
curses.
termname
( )- 返回环境变量
TERM
的值,该值被截断为 14 个字符。
- 返回环境变量
curses.
tigetflag
(* capname *)- 返回与 terminfo Function名称* capname 对应的布尔Function的值。如果 capname *不是布尔Function,则返回值
-1
;如果在终端描述中取消或不存在,则返回0
。
- 返回与 terminfo Function名称* capname 对应的布尔Function的值。如果 capname *不是布尔Function,则返回值
curses.
tigetnum
(* capname *)- 返回与 terminfo Function名称* capname 对应的数字Function的值。如果 capname *不是数字能力,则返回值
-2
;如果终端描述中取消或不存在该值,则返回-1
。
- 返回与 terminfo Function名称* capname 对应的数字Function的值。如果 capname *不是数字能力,则返回值
curses.
tigetstr
(* capname *)- 返回与 terminfo Function名称* capname 对应的字符串Function的值。如果 capname *不是字符串Function,或者在终端描述中被取消或不存在,则返回
None
。
- 返回与 terminfo Function名称* capname 对应的字符串Function的值。如果 capname *不是字符串Function,或者在终端描述中被取消或不存在,则返回
curses.
tparm
(* str * [,* ... *])- 使用提供的参数实例化字符串* str ,其中 str *应该是从 terminfo 数据库获得的参数化字符串。例如。
tparm(tigetstr("cup"), 5, 3)
可能会产生'\033[6;4H'
,具体结果取决于终端类型。
- 使用提供的参数实例化字符串* str ,其中 str *应该是从 terminfo 数据库获得的参数化字符串。例如。
curses.
typeahead
(* fd *)- 指定文件 Descriptors* fd 用于预 Importing 检查。如果 fd *为
-1
,则不进行预 Importing 检查。
- 指定文件 Descriptors* fd 用于预 Importing 检查。如果 fd *为
curses 库pass在更新屏幕时定期查找预先 Importing 来进行“行突破优化”。如果找到 Importing,并且它来自 tty,则将当前更新推迟到再次刷新或再次调用 doupdate 时,以更快地响应预先 Importing 的命令。此Function允许为预 Importing 检查指定其他文件 Descriptors。
curses.
unctrl
(* ch *)- 返回一个字符串,该字符串是字符* ch *的可打印表示形式。控制字符显示为插入符号,后跟该字符,例如
^C
。打印字符保持原样。
- 返回一个字符串,该字符串是字符* ch *的可打印表示形式。控制字符显示为插入符号,后跟该字符,例如
curses.
ungetch
(* ch *)- 按* ch *,以便下一个
getch()
将其返回。
- 按* ch *,以便下一个
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
,则默认行为是使用窗口大小)。
- 如果使用此函数,则应在调用initscr()或 newterm 之前调用此函数。当* flag *为
curses.
use_default_colors
( )- 允许在支持此Function的终端上使用默认颜色。使用它来支持应用程序的透明性。默认颜色分配给颜色编号-1.调用此函数后,
init_pair(x, curses.COLOR_RED, -1)
例如将颜色对* x *初始化为默认背景上的红色前景色。
- 允许在支持此Function的终端上使用默认颜色。使用它来支持应用程序的透明性。默认颜色分配给颜色编号-1.调用此函数后,
curses.
wrapper
(* func , ... *)
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 *,以覆盖先前显示的内容。
- 使用属性* attr 在
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
值都会使默认字符用于该参数。不能*使用关键字参数。下表列出了默认值:
Parameter | Description | Default value |
---|---|---|
ls | Left side | ACS_VLINE |
rs | Right side | ACS_VLINE |
ts | Top | ACS_HLINE |
bs | Bottom | ACS_HLINE |
tl | Upper-left corner | ACS_ULCORNER |
tr | Upper-right corner | ACS_URCORNER |
bl | Bottom-left corner | ACS_LLCORNER |
br | Bottom-right corner | ACS_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
( )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 *)window.
echochar
(* ch * [,* attr *])- 添加具有属性* attr 的字符 ch *,并立即在窗口上调用refresh()。
window.
enclose
(* y , x *)- 测试给定的屏幕相对字符单元格对是否被给定的窗口包围,并返回
True
或False
。对于确定屏幕窗口的哪个子集围住鼠标事件的位置很有用。
- 测试给定的屏幕相对字符单元格对是否被给定的窗口包围,并返回
window.
erase
( )- 清除窗口。
window.
getbegyx
( )- 返回左上角坐标的 Tuples
(y, x)
。
- 返回左上角坐标的 Tuples
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)
。
- 返回窗口的高度和宽度的 Tuples
window.
getparyx
( )- 将此窗口相对于其父窗口的起始坐标返回为两个整数变量 y 和 x。如果此窗口没有父窗口,则返回
-1, -1
。
- 将此窗口相对于其父窗口的起始坐标返回为两个整数变量 y 和 x。如果此窗口没有父窗口,则返回
window.
getstr
([* y , x *])- 从用户读取具有原始行编辑Function的字符串。
window.
getyx
( )- 返回相对于窗口左上角的当前光标位置的 Tuples
(y, x)
。
- 返回相对于窗口左上角的当前光标位置的 Tuples
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。
- 如果* flag 为
window.
idlok
(是)- 如果以是等于 1 调用,则curses将try并使用硬件行编辑Function。否则,将禁止插入/删除行。
window.
immedok
(* flag *)- 如果* flag *为
True
,则窗口图像中的任何更改都会自动刷新窗口;否则,窗口图像将自动刷新。您不再需要亲自致电refresh()。但是,由于重复调用 wrefresh,它可能会大大降低性能。默认情况下禁用此选项。
- 如果* flag *为
window.
inch
([* y , x *])- 返回窗口中给定位置的字符。最低的 8 位是适当的字符,较高的位是属性。
window.
insch
(* ch * [,* attr *])window.
insch
(* y , x , ch * [,* attr *])- 用属性* attr 在
(y, x)
处绘制字符 ch ,将行从位置 x *右移一个字符。
- 用属性* attr 在
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异常。
- 如果自上次调用refresh()以来修改了指定的行,则返回
window.
is_wintouched
( )- 如果自上次调用refresh()以来修改了指定的窗口,则返回
True
;否则返回False
。
- 如果自上次调用refresh()以来修改了指定的窗口,则返回
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()将是非阻塞的。
- 如果* yes *是
window.
notimeout
(是)- 如果* yes *为
1
,转义序列将不会超时。
- 如果* yes *为
如果* 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()。
- 如果在* flag *设置为
window.
syncup
( )- 触摸窗口祖先中在窗口中已更改的所有位置。
window.
timeout
(* delay *)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 例程返回一个整数,例如
curses.
OK
curses.
version
- 代表模块当前版本的字符串。也可以作为
__version__
使用。
- 代表模块当前版本的字符串。也可以作为
一些常量可用于指定字符单元格属性。可用的确切常数取决于系统。
Attribute | Meaning |
---|---|
A_ALTCHARSET |
备用字符集模式 |
A_BLINK |
Blink mode |
A_BOLD |
Bold mode |
A_DIM |
Dim mode |
A_INVIS |
不可见或空白模式 |
A_NORMAL |
Normal attribute |
A_PROTECT |
Protected mode |
A_REVERSE |
反转背景和前景色 |
A_STANDOUT |
Standout mode |
A_UNDERLINE |
Underline mode |
A_HORIZONTAL |
Horizontal highlight |
A_LEFT |
Left highlight |
A_LOW |
Low highlight |
A_RIGHT |
Right highlight |
A_TOP |
Top highlight |
A_VERTICAL |
Vertical highlight |
A_CHARTEXT |
位掩码以提取字符 |
有几个常量可用于提取某些方法返回的相应属性。
Bit-mask | Meaning |
---|---|
A_ATTRIBUTES |
位掩码以提取属性 |
A_CHARTEXT |
位掩码以提取字符 |
A_COLOR |
位掩码以提取颜色对字段信息 |
键由名称以KEY_
开头的整数常量引用。可用的确切键帽取决于系统。
Key constant | Key |
---|---|
KEY_MIN |
最小键值 |
KEY_BREAK |
断码(不可靠) |
KEY_DOWN |
Down-arrow |
KEY_UP |
Up-arrow |
KEY_LEFT |
Left-arrow |
KEY_RIGHT |
Right-arrow |
KEY_HOME |
Home 键(向左箭头) |
KEY_BACKSPACE |
Backspace (unreliable) |
KEY_F0 |
Function键。最多支持 64 个Function键。 |
KEY_Fn |
Function键的值* n * |
KEY_DL |
Delete line |
KEY_IL |
Insert line |
KEY_DC |
Delete character |
KEY_IC |
插入字符或进入插入模式 |
KEY_EIC |
退出插入字符模式 |
KEY_CLEAR |
Clear screen |
KEY_EOS |
清除到屏幕末尾 |
KEY_EOL |
清除到行尾 |
KEY_SF |
向前滚动 1 行 |
KEY_SR |
向后滚动 1 行(反向) |
KEY_NPAGE |
Next page |
KEY_PPAGE |
Previous page |
KEY_STAB |
Set tab |
KEY_CTAB |
Clear tab |
KEY_CATAB |
清除所有标签 |
KEY_ENTER |
Importing 或发送(不可靠) |
KEY_SRESET |
软(部分)重置(不可靠) |
KEY_RESET |
重置或硬重置(不可靠) |
KEY_PRINT |
|
KEY_LL |
下或下(左下) |
KEY_A1 |
键盘左上方 |
KEY_A3 |
键盘右上方 |
KEY_B2 |
键盘中心 |
KEY_C1 |
键盘左下 |
KEY_C3 |
键盘右下角 |
KEY_BTAB |
Back tab |
KEY_BEG |
Beg (beginning) |
KEY_CANCEL |
Cancel |
KEY_CLOSE |
Close |
KEY_COMMAND |
Cmd (command) |
KEY_COPY |
Copy |
KEY_CREATE |
Create |
KEY_END |
End |
KEY_EXIT |
Exit |
KEY_FIND |
Find |
KEY_HELP |
Help |
KEY_MARK |
Mark |
KEY_MESSAGE |
Message |
KEY_MOVE |
Move |
KEY_NEXT |
Next |
KEY_OPEN |
Open |
KEY_OPTIONS |
Options |
KEY_PREVIOUS |
Prev (previous) |
KEY_REDO |
Redo |
KEY_REFERENCE |
Ref (reference) |
KEY_REFRESH |
Refresh |
KEY_REPLACE |
Replace |
KEY_RESTART |
Restart |
KEY_RESUME |
Resume |
KEY_SAVE |
Save |
KEY_SBEG |
转移乞求(开始) |
KEY_SCANCEL |
Shifted Cancel |
KEY_SCOMMAND |
Shifted Command |
KEY_SCOPY |
Shifted Copy |
KEY_SCREATE |
Shifted Create |
KEY_SDC |
移位删除字符 |
KEY_SDL |
删除线移动 |
KEY_SELECT |
Select |
KEY_SEND |
Shifted End |
KEY_SEOL |
移位清除线 |
KEY_SEXIT |
Shifted Exit |
KEY_SFIND |
Shifted Find |
KEY_SHELP |
Shifted Help |
KEY_SHOME |
Shifted Home |
KEY_SIC |
Shifted Input |
KEY_SLEFT |
左移箭头 |
KEY_SMESSAGE |
Shifted Message |
KEY_SMOVE |
Shifted Move |
KEY_SNEXT |
Shifted Next |
KEY_SOPTIONS |
Shifted Options |
KEY_SPREVIOUS |
Shifted Prev |
KEY_SPRINT |
Shifted Print |
KEY_SREDO |
Shifted Redo |
KEY_SREPLACE |
Shifted Replace |
KEY_SRIGHT |
右移箭头 |
KEY_SRSUME |
Shifted Resume |
KEY_SSAVE |
Shifted Save |
KEY_SSUSPEND |
Shifted Suspend |
KEY_SUNDO |
Shifted Undo |
KEY_SUSPEND |
Suspend |
KEY_UNDO |
Undo |
KEY_MOUSE |
发生鼠标事件 |
KEY_RESIZE |
终端调整大小事件 |
KEY_MAX |
最大键值 |
在 VT100 及其软件仿真(例如 X 终端仿真器)上,通常至少有四个Function键(KEY_F1
,KEY_F2
,KEY_F3
,KEY_F4
)可用,并且箭头键以明显的方式 Map 到KEY_UP
,KEY_DOWN
,KEY_LEFT
和KEY_RIGHT
。如果您的计算机具有 PC 键盘,则可以安全地使用箭头键和十二个Function键(较旧的 PC 键盘可能只有十个Function键);此外,以下键盘 Map 是标准的:
Keycap | Constant |
---|---|
Insert | KEY_IC |
Delete | KEY_DC |
Home | KEY_HOME |
End | KEY_END |
Page Up | KEY_PPAGE |
Page Down | KEY_NPAGE |
下表列出了备用字符集中的字符。这些是从 VT100 终端继承的,通常可在软件仿真(例如 X 终端)上使用。如果没有可用的图形,则 curses 会退回到粗略的可打印 ASCII 近似值上。
Note
这些仅在调用initscr()后可用。
ACS code | Meaning |
---|---|
ACS_BBSS |
右上角的备用名称 |
ACS_BLOCK |
实心方块 |
ACS_BOARD |
正方形板 |
ACS_BSBS |
水平线的备用名称 |
ACS_BSSB |
左上角的备用名称 |
ACS_BSSS |
三通的替代名称 |
ACS_BTEE |
bottom tee |
ACS_BULLET |
bullet |
ACS_CKBOARD |
棋盘(点画) |
ACS_DARROW |
向下的箭头 |
ACS_DEGREE |
degree symbol |
ACS_DIAMOND |
diamond |
ACS_GEQUAL |
greater-than-or-equal-to |
ACS_HLINE |
horizontal line |
ACS_LANTERN |
lantern symbol |
ACS_LARROW |
left arrow |
ACS_LEQUAL |
less-than-or-equal-to |
ACS_LLCORNER |
左下角 |
ACS_LRCORNER |
右下角 |
ACS_LTEE |
left tee |
ACS_NEQUAL |
not-equal sign |
ACS_PI |
letter pi |
ACS_PLMINUS |
plus-or-minus sign |
ACS_PLUS |
大加号 |
ACS_RARROW |
right arrow |
ACS_RTEE |
right 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_STERLING |
pound sterling |
ACS_TTEE |
top tee |
ACS_UARROW |
up arrow |
ACS_ULCORNER |
左上角 |
ACS_URCORNER |
右上角 |
ACS_VLINE |
vertical line |
下表列出了 sched 义的颜色:
Constant | Color |
---|---|
COLOR_BLACK |
Black |
COLOR_BLUE |
Blue |
COLOR_CYAN |
青色(浅绿色蓝色) |
COLOR_GREEN |
Green |
COLOR_MAGENTA |
洋红色(紫红色) |
COLOR_RED |
Red |
COLOR_WHITE |
White |
COLOR_YELLOW |
Yellow |
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标志最初处于启用状态。
- class *
Textbox对象具有以下方法:
edit
([[validator *])- 这是您通常使用的入口点。它接受编辑键击,直到 Importing 了一个终止键击。如果提供了* validator *,则它必须是一个函数。对于以击键作为参数 Importing 的每个击键,都会调用此方法。命令分派在结果上完成。该方法以字符串形式返回窗口内容。 stripspaces属性会影响是否在窗口中包含空白。
do_command
(* ch *)- 处理单个命令按键。以下是受支持的特殊按键:
Keystroke | Action |
---|---|
Control-A | 转到窗口的左边缘。 |
Control-B | 向左移动光标,并在适当的情况下换行到上一行。 |
Control-D | 删除光标下的字符。 |
Control-E | 转到右边缘(Stripspaces 关闭)或行尾(Stripspaces 打开)。 |
Control-F | 向右光标,在适当的时候换行到下一行。 |
Control-G | 终止,返回窗口内容。 |
Control-H | 向后删除字符。 |
Control-J | 如果窗口是 1 行,则终止,否则插入换行符。 |
Control-K | 如果行为空,请将其删除,否则清除到行尾。 |
Control-L | Refresh screen. |
Control-N | 光标向下;向下移动一行。 |
Control-O | 在光标位置插入空白行。 |
Control-P | 光标向上;向上移动一行。 |
如果光标位于无法移动的边缘,则移动操作不会执行任何操作。在可能的情况下支持以下同义词:
Constant | Keystroke |
---|---|
KEY_LEFT |
Control-B |
KEY_RIGHT |
Control-F |
KEY_UP |
Control-P |
KEY_DOWN |
Control-N |
KEY_BACKSPACE |
Control-h |
其他所有击键均视为插入给定字符并向右移动(带有换行符)的命令。
gather
( )- 以字符串形式返回窗口内容; stripspaces成员是否影响窗口中的空白。
stripspaces
- 此属性是一个标志,用于控制窗口中空白的解释。启用时,每行的尾随空白将被忽略;它将使光标停留在尾随空白上的任何光标运动都将转到该行的末尾,并且在收集窗口内容时将尾随空白删除。