curses --- 終端字符單元顯示的處理?


curses 模塊提供了 curses 庫(kù)的接口,這是可移植高級(jí)終端處理的事實(shí)標(biāo)準(zhǔn)。

雖然 curses 在 Unix 環(huán)境中使用最為廣泛,但也有適用于 Windows,DOS 以及其他可能的系統(tǒng)的版本。此擴(kuò)展模塊旨在匹配 ncurses 的 API,這是一個(gè)部署在 Linux 和 Unix 的 BSD 變體上的開源 curses 庫(kù)。

備注

每當(dāng)文檔提到 字符 時(shí),它可以被指定為一個(gè)整數(shù),一個(gè)單字符 Unicode 字符串或者一個(gè)單字節(jié)的字節(jié)字符串。

每當(dāng)此文檔提到 字符串 時(shí),它可以被指定為一個(gè) Unicode 字符串或者一個(gè)字節(jié)字符串。

參見

模塊 curses.ascii

在 ASCII 字符上工作的工具,無(wú)論你的區(qū)域設(shè)置是什么。

模塊 curses.panel

為 curses 窗口添加深度的面板棧擴(kuò)展。

模塊 curses.textpad

用于使 curses 支持 Emacs 式綁定的可編輯文本部件。

用 Python 進(jìn)行 Curses 編程

關(guān)于配合 Python 使用 curses 的教學(xué)材料,由 Andrew Kuchling 和 Eric Raymond 撰寫。

Python 源碼發(fā)布包的 Tools/demo/ 目錄包含了一些使用此模塊所提供的 curses 綁定的示例程序。

函數(shù)?

curses 模塊定義了以下異常:

exception curses.error?

當(dāng) curses 庫(kù)中函數(shù)返回一個(gè)錯(cuò)誤時(shí)引發(fā)的異常。

備注

只要一個(gè)函數(shù)或方法的 xy 參數(shù)是可選項(xiàng),它們會(huì)默認(rèn)為當(dāng)前光標(biāo)位置。 而當(dāng) attr 是可選項(xiàng)時(shí),它會(huì)默認(rèn)為 A_NORMAL。

curses 模塊定義了以下函數(shù):

curses.baudrate()?

以每秒比特?cái)?shù)為單位返回終端輸出速度。 在軟件終端模擬器上它將具有一個(gè)固定的最高值。 此函數(shù)出于歷史原因被包括;在以前,它被用于寫輸出循環(huán)以提供時(shí)間延遲,并偶爾根據(jù)線路速度來改變接口。

curses.beep()?

發(fā)出短促的提醒聲音。

curses.can_change_color()?

根據(jù)程序員能否改變終端顯示的顏色返回 TrueFalse

curses.cbreak()?

進(jìn)入 cbreak 模式。 在 cbreak 模式(有時(shí)也稱為“稀有”模式)通常的 tty 行緩沖會(huì)被關(guān)閉并且字符可以被一個(gè)一個(gè)地讀取。 但是,與原始模式不同,特殊字符(中斷、退出、掛起和流程控制)會(huì)在 tty 驅(qū)動(dòng)和調(diào)用程序上保留其效果。 首先調(diào)用 raw() 然后調(diào)用 cbreak() 會(huì)將終端置于 cbreak 模式。

curses.color_content(color_number)?

返回顏色值 color_number 中紅、綠和藍(lán)(RGB)分量的強(qiáng)度,此強(qiáng)度值必須介于 0COLORS - 1 之間。 返回一個(gè) 3 元組,其中包含給定顏色的 R,G,B 值,它們必須介于 0 (無(wú)分量) 和 1000 (最大分量) 之間。

curses.color_pair(pair_number)?

返回用于以指定顏色對(duì)顯示文本的屬性值。 僅支持前 256 個(gè)顏色對(duì)。 該屬性值可與 A_STANDOUT, A_REVERSE 以及其他 A_* 屬性組合使用。 pair_number() 是此函數(shù)的對(duì)應(yīng)操作。

curses.curs_set(visibility)?

設(shè)置光標(biāo)狀態(tài)。 visibility 可設(shè)為 0, 12 表示不可見、正常與高度可見。 如果終端支持所請(qǐng)求的可見性,則返回之前的光標(biāo)狀態(tài);否則會(huì)引發(fā)異常。 在許多終端上,“正??梢姟蹦J綖橄聞澗€光標(biāo)而“高度可見”模式為方塊形光標(biāo)。

curses.def_prog_mode()?

將當(dāng)前終端模式保存為 "program" 模式,即正在運(yùn)行的程序使用 curses 的模式。 (與其相對(duì)的是 "shell" 模式,即程序不使用 curses。) 對(duì) reset_prog_mode() 的后續(xù)調(diào)用將恢復(fù)此模式。

curses.def_shell_mode()?

將當(dāng)前終端模式保存為 "shell" 模式,即正在運(yùn)行的程序不使用 curses 的模式。 (與其相對(duì)的是 "program" 模式,即程序使用 功能。) 對(duì) reset_shell_mode() 的后續(xù)調(diào)用將恢復(fù)此模式。

curses.delay_output(ms)?

在輸出中插入 ms 毫秒的暫停。

curses.doupdate()?

更新物理屏幕。 curses 庫(kù)會(huì)保留兩個(gè)數(shù)據(jù)結(jié)構(gòu),一個(gè)代表當(dāng)前物理屏幕的內(nèi)容以及一個(gè)虛擬屏幕代表需要的后續(xù)狀態(tài)。 doupdate() 整體更新物理屏幕以匹配虛擬屏幕。

虛擬屏幕可以通過在寫入操作例如在一個(gè)窗口上執(zhí)行 addstr() 之后調(diào)用 noutrefresh() 來刷新。 普通的 refresh() 調(diào)用只是簡(jiǎn)單的 noutrefresh()doupdate();如果你需要更新多個(gè)窗口,你可以通過在所有窗口上發(fā)出 noutrefresh() 調(diào)用再加單次 doupdate() 來提升性能并可減少屏幕閃爍。

curses.echo()?

進(jìn)入 echo 模式。 在 echo 模式下,輸入的每個(gè)字符都會(huì)在輸入后回顯到屏幕上。

curses.endwin()?

撤銷庫(kù)的初始化,使終端返回正常狀態(tài)。

curses.erasechar()?

將用戶的當(dāng)前擦除字符以單字節(jié)字節(jié)串對(duì)象的形式返回。 在 Unix 操作系統(tǒng)下這是 curses 程序用來控制 tty 的屬性,而不是由 curses 庫(kù)本身來設(shè)置的。

curses.filter()?

如果要使用 filter() 例程,它必須在調(diào)用 initscr() 之前被調(diào)用。 其效果是在這些調(diào)用期間,LINES 會(huì)被設(shè)為 1;clear, cup, cud, cud1, cuu1, cuu, vpa 等功能會(huì)被禁用;而 home 字符串會(huì)被設(shè)為 cr 的值。 其影響是光標(biāo)會(huì)被限制在當(dāng)前行內(nèi),屏幕刷新也是如此。 這可被用于啟用單字符模式的行編輯而不觸及屏幕的其余部分。

curses.flash()?

閃爍屏幕。 也就是將其改為反顯并在很短的時(shí)間內(nèi)將其改回原狀。 有些人更喜歡這樣的‘視覺響鈴’而非 beep() 所產(chǎn)生的聽覺提醒信號(hào)。

curses.flushinp()?

刷新所有輸入緩沖區(qū)。 這會(huì)丟棄任何已被用戶輸入但尚未被程序處理的預(yù)輸入內(nèi)容。

curses.getmouse()?

getch() 返回 KEY_MOUSE 以發(fā)出鼠標(biāo)事件信號(hào)之后,應(yīng)當(dāng)調(diào)用此方法來獲取加入隊(duì)列的鼠標(biāo)事件,事件以一個(gè) 5 元組 (id, x, y, z, bstate) 來表示。 其中 id 為用于區(qū)分多個(gè)設(shè)備的 ID 值,而 x, y, z 為事件的坐標(biāo)。 (z 目前未被使用。) bstate 為一個(gè)整數(shù)值,其各個(gè)比特位將被設(shè)置用來表示事件的類型,并將為下列常量中的一個(gè)或多個(gè)按位 OR 的結(jié)果,其中 n 是以 1 到 5 表示的鍵號(hào): BUTTONn_PRESSED, BUTTONn_RELEASED, BUTTONn_CLICKED, BUTTONn_DOUBLE_CLICKED, BUTTONn_TRIPLE_CLICKED, BUTTON_SHIFT, BUTTON_CTRL, BUTTON_ALT。

在 3.10 版更改: 現(xiàn)在 BUTTON5_* 常量如果是由下層 curses 庫(kù)提供的則會(huì)對(duì)外公開。

curses.getsyx()?

將當(dāng)前虛擬屏幕光標(biāo)的坐標(biāo)作為元組 (y, x) 返回。 如果 leaveok 當(dāng)前為 True,則返回 (-1, -1)。

curses.getwin(file)?

讀取由之前的 putwin() 調(diào)用存放在文件中的窗口相關(guān)數(shù)據(jù)。 該例程隨后將使用該數(shù)據(jù)創(chuàng)建并初始化一個(gè)新窗口,并返回該新窗口對(duì)象。

curses.has_colors()?

如果終端能顯示彩色則返回 True;否則返回 False

curses.has_extended_color_support()?

如果此模塊支持?jǐn)U展顏色則返回 True;否則返回 False。 擴(kuò)展顏色支持允許支持超過 16 種顏色的終端(例如 xterm-256color)支持超過 256 種顏色對(duì)。

擴(kuò)展顏色支持要求 ncurses 版本為 6.1 或更新。

3.10 新版功能.

curses.has_ic()?

如果終端具有插入和刪除字符的功能則返回 True。 此函數(shù)僅是出于歷史原因而被包括的,因?yàn)樗鞋F(xiàn)代軟件終端模擬器都具有這些功能。

curses.has_il()?

如果終端具有插入和刪除字符功能,或者能夠使用滾動(dòng)區(qū)域來模擬這些功能則返回 True。 此函數(shù)僅是出于歷史原因而被包括的,因?yàn)樗鞋F(xiàn)代軟件終端模擬器都具有這些功能。

curses.has_key(ch)?

接受一個(gè)鍵值 ch,并在當(dāng)前終端類型能識(shí)別出具有該值的鍵時(shí)返回 True。

curses.halfdelay(tenths)?

用于半延遲模式,與 cbreak 模式的類似之處是用戶所鍵入的字符會(huì)立即對(duì)程序可用。 但是,在阻塞 tenths 個(gè)十分之一秒之后,如果還未輸入任何內(nèi)容則將引發(fā)異常。 tenths 值必須為 1255 之間的數(shù)字。 使用 nocbreak() 可退出半延遲模式。

curses.init_color(color_number, r, g, b)?

更改某個(gè)顏色的定義,接受要更改的顏色編號(hào)以及三個(gè) RGB 值(表示紅綠藍(lán)三分量的強(qiáng)度)。 color_number 值必須為 0COLORS - 1 之間的數(shù)字。 r, g, b 值必須為 01000 之間的數(shù)字。 當(dāng)使用 init_color() 時(shí),出現(xiàn)在屏幕上的對(duì)應(yīng)顏色會(huì)立即按照新定義來更改。 此函數(shù)在大多數(shù)終端上都是無(wú)操作的;它僅會(huì)在 can_change_color() 返回 True 時(shí)生效。

curses.init_pair(pair_number, fg, bg)?

更改某個(gè)顏色對(duì)的定義。 它接受三個(gè)參數(shù):要更改的顏色對(duì)編號(hào),前景色編號(hào)和背景色編號(hào)。 pair_number 值必須為 1COLOR_PAIRS - 1 之間的數(shù)字(并且 0 號(hào)顏色對(duì)固定為黑底白字而無(wú)法更改)。 fgbg 參數(shù)必須為 0COLORS - 1 之間的數(shù)字,或者在調(diào)用 use_default_colors() 之后則為 -1。 如果顏色對(duì)之前已被初始化,則屏幕會(huì)被刷新使得出現(xiàn)在屏幕上的該顏色會(huì)立即按照新定義來更改。

curses.initscr()?

初始化庫(kù)。 返回代表整個(gè)屏幕的 窗口 對(duì)象。

備注

如果打開終端時(shí)發(fā)生錯(cuò)誤,則下層的 curses 庫(kù)可能會(huì)導(dǎo)致解釋器退出。

curses.is_term_resized(nlines, ncols)?

如果 resize_term() 會(huì)修改窗口結(jié)構(gòu)則返回 True,否則返回 False。

curses.isendwin()?

如果 endwin() 已經(jīng)被調(diào)用(即 curses 庫(kù)已經(jīng)被撤銷初始化則返回 True

curses.keyname(k)?

將編號(hào)為 k 的鍵名稱作為字節(jié)串對(duì)象返回。 生成可打印 ASCII 字符的鍵名稱就是鍵所對(duì)應(yīng)的字符。 Ctrl-鍵組合的鍵名稱則是一個(gè)兩字節(jié)的字節(jié)串對(duì)象,它由插入符 (b'^') 加對(duì)應(yīng)的可打印 ASCII 字符組成。 Alt-鍵組合 (128--255) 的鍵名稱則是由前綴 b'M-' 加對(duì)應(yīng)的可打印 ASCII 字符組成的字節(jié)串對(duì)象。

curses.killchar()?

將用戶的當(dāng)前行刪除字符以單字節(jié)字節(jié)串對(duì)象的形式返回。 在 Unix 操作系統(tǒng)下這是 curses 程序用來控制 tty 的屬性,而不是由 curses 庫(kù)本身來設(shè)置的。

curses.longname()?

返回一個(gè)字節(jié)串對(duì)象,其中包含描述當(dāng)前終端的 terminfo 長(zhǎng)名稱字段。 詳細(xì)描述的最大長(zhǎng)度為 128 個(gè)字符。 它僅在調(diào)用 initscr() 之后才會(huì)被定義。

curses.meta(flag)?

如果 flagTrue,則允許輸入 8 比特位的字符。 如果 flagFalse,則只允許 7 比特位的字符。

curses.mouseinterval(interval)?

Set the maximum time in milliseconds that can elapse between press and release events in order for them to be recognized as a click, and return the previous interval value. The default value is 200 milliseconds, or one fifth of a second.

curses.mousemask(mousemask)?

設(shè)置要報(bào)告的鼠標(biāo)事件,并返回一個(gè)元組 (availmask, oldmask)。 availmask 表明指定的鼠標(biāo)事件中哪些可以被報(bào)告;當(dāng)完全失敗時(shí)將返回 0oldmask 是給定窗口的鼠標(biāo)事件之前的掩碼值。 如果從未調(diào)用此函數(shù),則不會(huì)報(bào)告任何鼠標(biāo)事件。

curses.napms(ms)?

休眠 ms 毫秒。

curses.newpad(nlines, ncols)?

創(chuàng)建并返回一個(gè)指向具有給定行數(shù)和列數(shù)新的面板數(shù)據(jù)結(jié)構(gòu)的指針。 將面板作為窗口對(duì)象返回。

面板類似于窗口,區(qū)別在于它不受屏幕大小的限制,并且不必與屏幕的特定部分相關(guān)聯(lián)。 面板可以在需要使用大窗口時(shí)使用,并且每次只需將窗口的一部分放在屏幕上。 面板不會(huì)發(fā)生自動(dòng)刷新(例如由于滾動(dòng)或輸入回顯)。 面板的 refresh()noutrefresh() 方法需要 6 個(gè)參數(shù)來指定面板要顯示的部分以及要用于顯示的屏幕位置。 這些參數(shù)是 pminrow, pmincol, sminrow, smincol, smaxrow, smaxcol;p 參數(shù)表示要顯示的面板區(qū)域的左上角而 s 參數(shù)定義了要顯示的面板區(qū)域在屏幕上的剪切框。

curses.newwin(nlines, ncols)?
curses.newwin(nlines, ncols, begin_y, begin_x)

返回一個(gè)新的 窗口,其左上角位于 (begin_y, begin_x),并且其高度/寬度為 nlines/ncols

默認(rèn)情況下,窗口將從指定位置擴(kuò)展到屏幕的右下角。

curses.nl()?

進(jìn)入 newline 模式。 此模式會(huì)在輸入時(shí)將回車轉(zhuǎn)換為換行符,并在輸出時(shí)將換行符轉(zhuǎn)換為回車加換行。 newline 模式會(huì)在初始時(shí)啟用。

curses.nocbreak()?

退出 cbreak 模式。 返回具有行緩沖的正常 "cooked" 模式。

curses.noecho()?

退出 echo 模式。 關(guān)閉輸入字符的回顯。

curses.nonl()?

退出 newline 模式。 停止在輸入時(shí)將回車轉(zhuǎn)換為換行,并停止在輸出時(shí)從換行到換行/回車的底層轉(zhuǎn)換(但這不會(huì)改變 addch('\n') 的行為,此行為總是在虛擬屏幕上執(zhí)行相當(dāng)于回車加換行的操作)。 當(dāng)停止轉(zhuǎn)換時(shí),curses 有時(shí)能使縱向移動(dòng)加快一些;并且,它將能夠在輸入時(shí)檢測(cè)回車鍵。

curses.noqiflush()?

當(dāng)使用 noqiflush() 例程時(shí),與 INTR, QUITSUSP 字符相關(guān)聯(lián)的輸入和輸出隊(duì)列的正常刷新將不會(huì)被執(zhí)行。 如果你希望在處理程序退出后還能繼續(xù)輸出,就像沒有發(fā)生過中斷一樣,你可能會(huì)想要在信號(hào)處理程序中調(diào)用 noqiflush()。

curses.noraw()?

退出 raw 模式。 返回具有行緩沖的正常 "cooked" 模式。

curses.pair_content(pair_number)?

返回包含對(duì)應(yīng)于所請(qǐng)求顏色對(duì)的元組 (fg, bg)。 pair_number 的值必須在 0COLOR_PAIRS - 1 之間。

curses.pair_number(attr)?

返回通過屬性值 attr 所設(shè)置的顏色對(duì)的編號(hào)。 color_pair() 是此函數(shù)的對(duì)應(yīng)操作。

curses.putp(str)?

等價(jià)于 tputs(str, 1, putchar);為當(dāng)前終端發(fā)出指定 terminfo 功能的值。 請(qǐng)注意 putp() 的輸出總是前往標(biāo)準(zhǔn)輸出。

curses.qiflush([flag])?

如果 flagFalse,則效果與調(diào)用 noqiflush() 相同。 如果 flagTrue 或未提供參數(shù),則在讀取這些控制字符時(shí)隊(duì)列將被刷新。

curses.raw()?

進(jìn)入 raw 模式。 在 raw 模式下,正常的行緩沖和對(duì)中斷、退出、掛起和流程控制鍵的處理會(huì)被關(guān)閉;字符會(huì)被逐個(gè)地提交給 curses 輸入函數(shù)。

curses.reset_prog_mode()?

將終端恢復(fù)到 "program" 模式,如之前由 def_prog_mode() 所保存的一樣。

curses.reset_shell_mode()?

將終端恢復(fù)到 "shell" 模式,如之前由 def_shell_mode() 所保存的一樣。

curses.resetty()?

將終端模式恢復(fù)到最后一次調(diào)用 savetty() 時(shí)的狀態(tài)。

curses.resize_term(nlines, ncols)?

resizeterm() 用來執(zhí)行大部分工作的后端函數(shù);當(dāng)調(diào)整窗口大小時(shí),resize_term() 會(huì)以空白填充擴(kuò)展區(qū)域。 調(diào)用方應(yīng)用程序應(yīng)當(dāng)以適當(dāng)?shù)臄?shù)據(jù)填充這些區(qū)域。 resize_term() 函數(shù)會(huì)嘗試調(diào)整所有窗口的大小。 但是,由于面板的調(diào)用約定,在不與應(yīng)用程序進(jìn)行額外交互的情況下是無(wú)法調(diào)整其大小的。

curses.resizeterm(nlines, ncols)?

將標(biāo)準(zhǔn)窗口和當(dāng)前窗口的大小調(diào)整為指定的尺寸,并調(diào)整由 curses 庫(kù)所使用的記錄窗口尺寸的其他記錄數(shù)據(jù)(特別是 SIGWINCH 處理程序)。

curses.savetty()?

將終端模式的當(dāng)前狀態(tài)保存在緩沖區(qū)中,可供 resetty() 使用。

curses.get_escdelay()?

提取通過 set_escdelay() 設(shè)置的值。

3.9 新版功能.

curses.set_escdelay(ms)?

設(shè)置讀取一個(gè)轉(zhuǎn)義字符后要等待的毫秒數(shù),以區(qū)分在鍵盤上輸入的單個(gè)轉(zhuǎn)義字符與通過光標(biāo)和功能鍵發(fā)送的轉(zhuǎn)義序列。

3.9 新版功能.

curses.get_tabsize()?

提取通過 set_tabsize() 設(shè)置的值。

3.9 新版功能.

curses.set_tabsize(size)?

設(shè)置 curses 庫(kù)在將制表符添加到窗口時(shí)將制表符轉(zhuǎn)換為空格所使用的列數(shù)。

3.9 新版功能.

curses.setsyx(y, x)?

將虛擬屏幕光標(biāo)設(shè)置到 y, x。 如果 yx 均為 -1,則 leaveok 將設(shè)為 True

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

初始化終端。 term 為給出終端名稱的字符串或?yàn)?None;如果省略或?yàn)?None,則將使用 TERM 環(huán)境變量的值。 fd 是任何初始化序列將被發(fā)送到的文件描述符;如未指定或?yàn)?-1,則將使用 sys.stdout 的文件描述符。

curses.start_color()?

如果程序員想要使用顏色,則必須在任何其他顏色操作例程被調(diào)用之前調(diào)用它。 在 initscr() 之后立即調(diào)用此例程是一個(gè)很好的做法。

start_color() 會(huì)初始化八種基本顏色(黑、紅、綠、黃、藍(lán)、品、青和白)以及 curses 模塊中的兩個(gè)全局變量 COLORSCOLOR_PAIRS,其中包含終端可支持的顏色和顏色對(duì)的最大數(shù)量。 它還會(huì)將終端中的顏色恢復(fù)為終端剛啟動(dòng)時(shí)的值。

curses.termattrs()?

返回終端所支持的所有視頻屬性邏輯 OR 的值。 此信息適用于當(dāng) curses 程序需要對(duì)屏幕外觀進(jìn)行完全控制的情況。

curses.termname()?

將環(huán)境變量 TERM 的值截短至 14 個(gè)字節(jié),作為字節(jié)串對(duì)象返回。

curses.tigetflag(capname)?

將與 terminfo 功能名稱 capname 相對(duì)應(yīng)的布爾功能值以整數(shù)形式返回。 如果 capname 不是一個(gè)布爾功能則返回 -1,如果其被取消或不存在于終端描述中則返回 0。

curses.tigetnum(capname)?

將與 terminfo 功能名稱 capname 相對(duì)應(yīng)的數(shù)字功能值以整數(shù)形式返回。 如果 capname 不是一個(gè)數(shù)字功能則返回 -2,如果其被取消或不存在于終端描述中則返回 -1

curses.tigetstr(capname)?

將與 terminfo 功能名稱 capname 相對(duì)應(yīng)的字符串功能值以字節(jié)串對(duì)象形式返回。 如果 capname 不是一個(gè) terminfo "字符串功能" 或者如果其被取消或不存在于終端描述中則返回 None。

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

使用提供的形參初始化字節(jié)串對(duì)象 str,其中 str 應(yīng)當(dāng)是從 terminfo 數(shù)據(jù)庫(kù)獲取的參數(shù)化字符串。 例如 tparm(tigetstr("cup"), 5, 3) 的結(jié)果可能為 b'\033[6;4H',實(shí)際結(jié)果將取決于終端類型。

curses.typeahead(fd)?

指定將被用于預(yù)輸入檢查的文件描述符 fd。 如果 fd-1,則不執(zhí)行預(yù)輸入檢查。

curses 庫(kù)會(huì)在更新屏幕時(shí)通過定期查找預(yù)輸入來執(zhí)行 "斷行優(yōu)化"。 如果找到了輸入,并且輸入是來自于 tty,則會(huì)將當(dāng)前更新推遲至 refresh 或 doupdate 再次被調(diào)用的時(shí)候,以便允許更快地響應(yīng)預(yù)先輸入的命令。 此函數(shù)允許為預(yù)輸入檢查指定其他的文件描述符。

curses.unctrl(ch)?

返回一個(gè)字節(jié)串對(duì)象作為字符 ch 的可打印表示形式。 控制字符會(huì)表示為一個(gè)變換符加相應(yīng)的字符,例如 b'^C'。 可打印字符則會(huì)保持原樣。

curses.ungetch(ch)?

推送 ch 以便讓下一個(gè) getch() 返回該字符。

備注

getch() 被調(diào)用之前只能推送一個(gè) ch。

curses.update_lines_cols()?

更新 LINESCOLS。 適用于檢測(cè)屏幕大小的手動(dòng)調(diào)整。

3.5 新版功能.

curses.unget_wch(ch)?

推送 ch 以便讓下一個(gè) get_wch() 返回該字符。

備注

get_wch() 被調(diào)用之前只能推送一個(gè) ch。

3.3 新版功能.

curses.ungetmouse(id, x, y, z, bstate)?

KEY_MOUSE 事件推送到輸入隊(duì)列,將其與給定的狀態(tài)數(shù)據(jù)進(jìn)行關(guān)聯(lián)。

curses.use_env(flag)?

如果使用此函數(shù),則應(yīng)當(dāng)在調(diào)用 initscr() 或 newterm 之前調(diào)用它。 當(dāng) flagFalse 時(shí),將會(huì)使用在 terminfo 數(shù)據(jù)庫(kù)中指定的行和列的值,即使設(shè)置了環(huán)境變量 LINESCOLUMNS (默認(rèn)使用),或者如果 curses 是在窗口中運(yùn)行(在此情況下如果未設(shè)置 LINESCOLUMNS 則默認(rèn)行為將是使用窗口大?。?。

curses.use_default_colors()?

允許在支持此特性的終端上使用默認(rèn)的顏色值。 使用此函數(shù)可在你的應(yīng)用程序中支持透明效果。 默認(rèn)顏色會(huì)被賦給顏色編號(hào) -1。 舉例來說,在調(diào)用此函數(shù)后,init_pair(x, curses.COLOR_RED, -1) 會(huì)將顏色對(duì) x 初始化為紅色前景和默認(rèn)顏色背景。

curses.wrapper(func, /, *args, **kwargs)?

初始化 curses 并調(diào)用另一個(gè)可調(diào)用對(duì)象 func,該對(duì)象應(yīng)當(dāng)為你的使用 curses 的應(yīng)用程序的其余部分。 如果應(yīng)用程序引發(fā)了異常,此函數(shù)將在重新引發(fā)異常并生成回溯信息之前將終端恢復(fù)到正常狀態(tài)。 隨后可調(diào)用對(duì)象 func 會(huì)被傳入主窗口 'stdscr' 作為其第一個(gè)參數(shù),再帶上其他所有傳給 wrapper() 的參數(shù)。 在調(diào)用 func 之前,wrapper() 會(huì)啟用 cbreak 模式,關(guān)閉回顯,啟用終端鍵盤,并在終端具有顏色支持的情況下初始化顏色。 在退出時(shí)(無(wú)論是正常退出還是異常退出)它會(huì)恢復(fù) cooked 模式,打開回顯,并禁用終端鍵盤。

Window 對(duì)象?

Window 對(duì)象會(huì)由上面的 initscr()newwin() 返回,它具有以下方法和屬性:

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

將帶有屬性 attr 的字符 ch 繪制到 (y, x),覆蓋之前在該位置上繪制的任何字符。 默認(rèn)情況下,字符的位置和屬性均為窗口對(duì)象的當(dāng)前設(shè)置。

備注

在窗口、子窗口或面板之外寫入會(huì)引發(fā) curses.error。 嘗試在窗口、子窗口或面板的右下角寫入將在字符被打印之后導(dǎo)致異常被引發(fā)。

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

將帶有屬性 attr 的字符串 str 中的至多 n 個(gè)字符繪制到 (y, x),覆蓋之前在屏幕上的任何內(nèi)容。

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

將帶有屬性 attr 的字符串 str 繪制到 (y, x),覆蓋之前在屏幕上的任何內(nèi)容。

備注

  • 在窗口、子窗口或面板之外寫入會(huì)引發(fā) curses.error。 嘗試在窗口、子窗口或面板的右下角寫入將在字符串被打印之后導(dǎo)致異常被引發(fā)。

  • 此 Python 模塊的后端 ncurses 中的一個(gè)缺陷 會(huì)在調(diào)整窗口大小時(shí)導(dǎo)致段錯(cuò)誤。 此缺陷已在 ncurses-6.1-20190511 中被修復(fù)。 如果你必須使用較早版本的 ncurses,則你只要在調(diào)用 addstr() 時(shí)不傳入嵌入了換行符的 str 即可避免觸發(fā)此錯(cuò)誤。 請(qǐng)為每一行分別調(diào)用 addstr()

window.attroff(attr)?

從應(yīng)用于寫入到當(dāng)前窗口的 "background" 集中移除屬性 attr

window.attron(attr)?

向應(yīng)用于寫入到當(dāng)前窗口的 "background" 集中添加屬性 attr。

window.attrset(attr)?

將 "background" 屬性集設(shè)為 attr。 該集合初始時(shí)為 0 (無(wú)屬性)。

window.bkgd(ch[, attr])?

將窗口 background 特征屬性設(shè)為帶有屬性 attr 的字符 ch。 隨后此修改將應(yīng)用于放置到該窗口中的每個(gè)字符。

  • 窗口中每個(gè)字符的屬性會(huì)被修改為新的 background 屬性。

  • 不論之前的 background 字符出現(xiàn)在哪里,它都會(huì)被修改為新的 background 字符。

window.bkgdset(ch[, attr])?

設(shè)置窗口的背景。 窗口的背景由字符和屬性的任意組合構(gòu)成。 背景的屬性部分會(huì)與寫入窗口的所有非空白字符合并(即 OR 運(yùn)算)。 背景和字符和屬性部分均會(huì)與空白字符合并。 背景將成為字符的特征屬性并在任何滾動(dòng)與插入/刪除行/字符操作中與字符一起移動(dòng)。

window.border([ls[, rs[, ts[, bs[, tl[, tr[, bl[, br]]]]]]]])?

在窗口邊緣繪制邊框。每個(gè)參數(shù)指定用于邊界特定部分的字符;請(qǐng)參閱下表了解更多詳情。

備注

任何形參的值為 0 都將導(dǎo)致該形參使用默認(rèn)字符。 關(guān)鍵字形參 不可 被使用。 默認(rèn)字符在下表中列出:

參數(shù)

描述

默認(rèn)值

ls

左側(cè)

ACS_VLINE

rs

右側(cè)

ACS_VLINE

ts

頂部

ACS_HLINE

bs

底部

ACS_HLINE

tl

左上角

ACS_ULCORNER

tr

右上角

ACS_URCORNER

bl

左下角

ACS_LLCORNER

br

右下角

ACS_LRCORNER

window.box([vertch, horch])?

類似于 border(),但 lsrs 均為 vertchtsbs 均為 horch。 此函數(shù)總是會(huì)使用默認(rèn)的轉(zhuǎn)角字符。

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

在當(dāng)前光標(biāo)位置或是在所提供的位置 (y, x) 設(shè)置 num 個(gè)字符的屬性。 如果 num 未給出或?yàn)?-1,則將屬性設(shè)置到所有字符上直至行尾。 如果提供了位置 (y, x) 則此函數(shù)會(huì)將光標(biāo)移至該位置。 修改過的行將使用 touchline() 方法處理以便下次窗口刷新時(shí)內(nèi)容會(huì)重新顯示。

window.clear()?

類似于 erase(),但還會(huì)導(dǎo)致在下次調(diào)用 refresh() 時(shí)整個(gè)窗口被重新繪制。

window.clearok(flag)?

如果 flagTrue,則在下次調(diào)用 refresh() 時(shí)將完全清除窗口。

window.clrtobot()?

從光標(biāo)位置開始擦除直至窗口末端:光標(biāo)以下的所有行都會(huì)被刪除,然后會(huì)執(zhí)行 clrtoeol() 的等效操作。

window.clrtoeol()?

從光標(biāo)位置開始擦除直至行尾。

window.cursyncup()?

更新窗口所有上級(jí)窗口的當(dāng)前光標(biāo)位置以反映窗口的當(dāng)前光標(biāo)位置。

window.delch([y, x])?

刪除位于 (y, x) 的任何字符。

window.deleteln()?

刪除在光標(biāo)之下的行。 所有后續(xù)的行都會(huì)上移一行。

window.derwin(begin_y, begin_x)?
window.derwin(nlines, ncols, begin_y, begin_x)

"derive window" 的縮寫,derwin() 與調(diào)用 subwin() 等效,不同之處在于 begin_ybegin_x 是想對(duì)于窗口的初始位置,而不是相對(duì)于整個(gè)屏幕。 返回代表所派生窗口的窗口對(duì)象。

window.echochar(ch[, attr])?

使用屬性 attr 添加字符 ch,并立即在窗口上調(diào)用 refresh()

window.enclose(y, x)?

檢測(cè)給定的相對(duì)屏幕的字符-單元格坐標(biāo)是否被給定的窗口所包圍,返回 TrueFalse。 它適用于確定是哪個(gè)屏幕窗口子集包圍著某個(gè)鼠標(biāo)事件的位置。

在 3.10 版更改: 在之前版本中它會(huì)返回 10 而不是 TrueFalse。

window.encoding?

Encoding used to encode method arguments (Unicode strings and characters). The encoding attribute is inherited from the parent window when a subwindow is created, for example with window.subwin(). By default, current locale encoding is used (see locale.getencoding()).

3.3 新版功能.

window.erase()?

清空窗口。

window.getbegyx()?

返回左上角坐標(biāo)的元組 (y, x)。

window.getbkgd()?

返回給定窗口的當(dāng)前背景字符/屬性對(duì)。

window.getch([y, x])?

獲取一個(gè)字符。 請(qǐng)注意所返回的整數(shù) 不一定 要在 ASCII 范圍以內(nèi):功能鍵、小鍵盤鍵等等是由大于 255 的數(shù)字表示的。 在無(wú)延遲模式下,如果沒有輸入則返回 -1,在其他情況下都會(huì)等待直至有鍵被按下。

window.get_wch([y, x])?

獲取一個(gè)寬字符。 對(duì)于大多數(shù)鍵都是返回一個(gè)字符,對(duì)于功能鍵、小鍵盤鍵和其他特殊鍵則是返回一個(gè)整數(shù)。 在無(wú)延遲模式下,如果沒有輸入則引發(fā)一個(gè)異常。

3.3 新版功能.

window.getkey([y, x])?

獲取一個(gè)字符,返回一個(gè)字符串而不是像 getch() 那樣返回一個(gè)整數(shù)。 功能鍵、小鍵盤鍵和其他特殊鍵則是返回一個(gè)包含鍵名的多字節(jié)字符串。 在無(wú)延遲模式下,如果沒有輸入則引發(fā)一個(gè)異常。

window.getmaxyx()?

返回窗口高度和寬度的元組 (y, x)。

window.getparyx()?

將此窗口相對(duì)于父窗口的起始坐標(biāo)作為元組 (y, x) 返回。 如果此窗口沒有父窗口則返回 (-1, -1)。

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

從用戶讀取一個(gè)字節(jié)串對(duì)象,附帶基本的行編輯功能。

window.getyx()?

返回當(dāng)前光標(biāo)相對(duì)于窗口左上角的位置的元組 (y, x)。

window.hline(ch, n)?
window.hline(y, x, ch, n)

顯示一條起始于 (y, x) 長(zhǎng)度為 n 個(gè)字符 ch 的水平線。

window.idcok(flag)?

如果 flagFalse,curses 將不再考慮使用終端的硬件插入/刪除字符功能;如果 flagTrue,則會(huì)啟用字符插入和刪除。 當(dāng) curses 首次初始化時(shí),默認(rèn)會(huì)啟用字符插入/刪除。

window.idlok(flag)?

如果 flagTruecurses 將嘗試使用硬件行編輯功能。 否則,行插入/刪除會(huì)被禁用。

window.immedok(flag)?

如果 flagTrue,窗口圖像中的任何改變都會(huì)自動(dòng)導(dǎo)致窗口被刷新;你不必再自己調(diào)用 refresh()。 但是,這可能會(huì)由于重復(fù)調(diào)用 wrefresh 而顯著降低性能。 此選項(xiàng)默認(rèn)被禁用。

window.inch([y, x])?

返回窗口中給定位置上的字符。 下面的 8 個(gè)比特位是字符本身,上面的比特位則為屬性。

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

將帶有屬性 attr 的字符 ch 繪制到 (y, x),將該行從位置 x 開始右移一個(gè)字符。

window.insdelln(nlines)?

在指定窗口的當(dāng)前行上方插入 nlines 行。 下面的 nlines 行將丟失。 對(duì)于 nlines 為負(fù)值的情況,則從光標(biāo)下方的行開始刪除 nlines 行,并將其余的行向上移動(dòng)。 下面的 nlines 行會(huì)被清空。 當(dāng)前光標(biāo)位置將保持不變。

window.insertln()?

在光標(biāo)下方插入一個(gè)空行。 所有后續(xù)的行都會(huì)下移一行。

window.insnstr(str, n[, attr])?
window.insnstr(y, x, str, n[, attr])

在光標(biāo)下方的字符之前插入一個(gè)至多為 n 個(gè)字符的字符串(字符數(shù)量將與該行相匹配)。 如果 n 為零或負(fù)數(shù),則插入整個(gè)字符串。 光標(biāo)右邊的所有字符將被右移,該行右端的字符將丟失。 光標(biāo)位置將保持不變(在移到可能指定的 y, x 之后)。

window.insstr(str[, attr])?
window.insstr(y, x, str[, attr])

在光標(biāo)下方的字符之前插入一個(gè)字符串(字符數(shù)量將與該行相匹配)。 光標(biāo)右邊的所有字符將被右移,該行右端的字符將丟失。 光標(biāo)位置將保持不變(在移到可能指定的 y, x 之后)。

window.instr([n])?
window.instr(y, x[, n])

返回從窗口的當(dāng)前光標(biāo)位置,或者指定的 y, x 開始提取的字符所對(duì)應(yīng)的字節(jié)串對(duì)象。 屬性會(huì)從字符中去除。 如果指定了 ninstr() 將返回長(zhǎng)度至多為 n 個(gè)字符的字符串(不包括末尾的 NUL)。

window.is_linetouched(line)?

如果指定的行自上次調(diào)用 refresh() 后發(fā)生了改變則返回 True;否則返回 False。 如果 line 對(duì)于給定的窗口不可用則會(huì)引發(fā) curses.error 異常。

window.is_wintouched()?

如果指定的窗口自上次調(diào)用 refresh() 后發(fā)生了改變則返回 True;否則返回 False

window.keypad(flag)?

如果 flagTrue,則某些鍵(小鍵盤鍵、功能鍵等)生成的轉(zhuǎn)義序列將由 curses 來解析。 如果 flagFalse,轉(zhuǎn)義序列將保持在輸入流中的原樣。

window.leaveok(flag)?

如果 flagTrue,則在更新時(shí)光標(biāo)將停留在原地,而不是在“光標(biāo)位置”。 這將可以減少光標(biāo)的移動(dòng)。 在可能的情況下光標(biāo)將變?yōu)椴豢梢姟?/p>

如果 flagFalse,光標(biāo)在更新后將總是位于“光標(biāo)位置”。

window.move(new_y, new_x)?

將光標(biāo)移至 (new_y, new_x)。

window.mvderwin(y, x)?

讓窗口在其父窗口內(nèi)移動(dòng)。 窗口相對(duì)于屏幕的參數(shù)不會(huì)被更改。 此例程用于在屏幕的相同物理位置顯示父窗口的不同部分。

window.mvwin(new_y, new_x)?

移動(dòng)窗口以使其左上角位于 (new_y, new_x)。

window.nodelay(flag)?

如果 flagTrue,則 getch() 將為非阻塞的。

window.notimeout(flag)?

如果 flagTrue,則轉(zhuǎn)義序列將不會(huì)發(fā)生超時(shí)。

如果 flagFalse,則在幾毫秒之后,轉(zhuǎn)義序列將不會(huì)被解析,并將保持在輸入流中的原樣。

window.noutrefresh()?

標(biāo)記為刷新但保持等待。 此函數(shù)會(huì)更新代表預(yù)期窗口狀態(tài)的數(shù)據(jù)結(jié)構(gòu),但并不強(qiáng)制更新物理屏幕。 要完成后者,請(qǐng)調(diào)用 doupdate()

window.overlay(destwin[, sminrow, smincol, dminrow, dmincol, dmaxrow, dmaxcol])?

將窗口覆蓋在 destwin 上方。 窗口的大小不必相同,只有重疊的區(qū)域會(huì)被復(fù)制。 此復(fù)制是非破壞性的,這意味著當(dāng)前背景字符不會(huì)覆蓋掉 destwin 的舊內(nèi)容。

為了獲得對(duì)被復(fù)制區(qū)域的細(xì)粒度控制,可以使用 overlay() 的第二種形式。 sminrowsmincol 是源窗口的左上角坐標(biāo),而其他變量則在目標(biāo)窗口中標(biāo)記出一個(gè)矩形。

window.overwrite(destwin[, sminrow, smincol, dminrow, dmincol, dmaxrow, dmaxcol])?

將窗口覆蓋在 destwin 上方。 窗口的大小不必相同,此時(shí)只有重疊的區(qū)域會(huì)被復(fù)制。 此復(fù)制是破壞性的,這意味著當(dāng)前背景字符會(huì)覆蓋掉 destwin 的舊內(nèi)容。

為了獲得對(duì)被復(fù)制區(qū)域的細(xì)粒度控制,可以使用 overwrite() 的第二種形式。 sminrowsmincol 是源窗口的左上角坐標(biāo),而其他變量則在目標(biāo)窗口中標(biāo)記出一個(gè)矩形。

window.putwin(file)?

將關(guān)聯(lián)到窗口的所有數(shù)據(jù)寫入到所提供的文件對(duì)象。 此信息可在以后使用 getwin() 函數(shù)來提取。

window.redrawln(beg, num)?

指明從 beg 行開始的 num 個(gè)屏幕行已被破壞并且應(yīng)當(dāng)在下次 refresh() 調(diào)用時(shí)完全重繪。

window.redrawwin()?

觸碰整個(gè)窗口,以使其在下次 refresh() 調(diào)用時(shí)完全重繪。

window.refresh([pminrow, pmincol, sminrow, smincol, smaxrow, smaxcol])?

立即更新顯示(將實(shí)際屏幕與之前的繪制/刪除方法進(jìn)行同步)。

6 個(gè)可選參數(shù)僅在窗口為使用 newpad() 創(chuàng)建的面板時(shí)可被指定。 需要額外的形參來指定所涉及到的是面板和屏幕的哪一部分。 pminrowpmincol 指定要在面板中顯示的矩形的左上角。 sminrow, smincol, smaxrowsmaxcol 指定要在屏幕中顯示的矩形的邊。 要在面板中顯示的矩形的右下角是根據(jù)屏幕坐標(biāo)計(jì)算出來的,由于矩形的大小必須相同。 兩個(gè)矩形都必須完全包含在其各自的結(jié)構(gòu)之內(nèi)。 負(fù)的 pminrow, pmincol, sminrowsmincol 值會(huì)被視為將它們?cè)O(shè)為零值。

window.resize(nlines, ncols)?

為 curses 窗口重新分配存儲(chǔ)空間以將其尺寸調(diào)整為指定的值。 如果任一維度的尺寸大于當(dāng)前值,則窗口的數(shù)據(jù)將以具有合并了當(dāng)前背景渲染(由 bkgdset() 設(shè)置)的空白來填充。

window.scroll([lines=1])?

將屏幕或滾動(dòng)區(qū)域向上滾動(dòng) lines 行。

window.scrollok(flag)?

控制當(dāng)一個(gè)窗口的光標(biāo)移出窗口或滾動(dòng)區(qū)域邊緣時(shí)會(huì)發(fā)生什么,這可能是在底端行執(zhí)行換行操作,或者在最后一行輸入最后一個(gè)字符導(dǎo)致的結(jié)果。 如果 flagFalse,光標(biāo)會(huì)留在底端行。 如果 flagTrue,窗口會(huì)向上滾動(dòng)一行。 請(qǐng)注意為了在終端上獲得實(shí)際的滾動(dòng)效果,還需要調(diào)用 idlok()。

window.setscrreg(top, bottom)?

設(shè)置從 top 行至 bottom 行的滾動(dòng)區(qū)域。 所有滾動(dòng)操作將在此區(qū)域中進(jìn)行。

window.standend()?

關(guān)閉 standout 屬性。 在某些終端上此操作會(huì)有關(guān)閉所有屬性的副作用。

window.standout()?

啟用屬性 A_STANDOUT。

window.subpad(begin_y, begin_x)?
window.subpad(nlines, ncols, begin_y, begin_x)

返回一個(gè)子窗口,其左上角位于 (begin_y, begin_x),并且其寬度/高度為 ncols/nlines。

window.subwin(begin_y, begin_x)?
window.subwin(nlines, ncols, begin_y, begin_x)

返回一個(gè)子窗口,其左上角位于 (begin_y, begin_x),并且其寬度/高度為 ncols/nlines。

默認(rèn)情況下,子窗口將從指定位置擴(kuò)展到窗口的右下角。

window.syncdown()?

觸碰已在上級(jí)窗口上被觸碰的每個(gè)位置。 此例程由 refresh() 調(diào)用,因此幾乎從不需要手動(dòng)調(diào)用。

window.syncok(flag)?

如果 flagTrue,則 syncup() 會(huì)在窗口發(fā)生改變的任何時(shí)候自動(dòng)被調(diào)用。

window.syncup()?

觸碰已在窗口中被改變的此窗口的各個(gè)上級(jí)窗口中的所有位置。

window.timeout(delay)?

為窗口設(shè)置阻塞或非阻塞讀取行為。 如果 delay 為負(fù)值,則會(huì)使用阻塞讀取(這將無(wú)限期地等待輸入)。 如果 delay 為零,則會(huì)使用非阻塞讀取,并且當(dāng)沒有輸入在等待時(shí) getch() 將返回 -1。 如果 delay 為正值,則 getch() 將阻塞 delay 毫秒,并且當(dāng)此延時(shí)結(jié)束時(shí)仍無(wú)輸入將返回 -1。

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

假定從行 start 開始的 count 行已被更改。 如果提供了 changed,它將指明是將受影響的行標(biāo)記為已更改 (changed=True) 還是未更改 (changed=False)。

window.touchwin()?

假定整個(gè)窗口已被更改,其目的是用于繪制優(yōu)化。

window.untouchwin()?

將自上次調(diào)用 refresh() 以來窗口中的所有行標(biāo)記為未改變。

window.vline(ch, n)?
window.vline(y, x, ch, n)

顯示一條起始于 (y, x) 長(zhǎng)度為 n 個(gè)字符 ch 的垂直線。

常量?

curses 模塊定義了以下數(shù)據(jù)成員:

curses.ERR?

一些返回整數(shù)的 curses 例程,例如 getch(),在失敗時(shí)將返回 ERR。

curses.OK?

一些返回整數(shù)的 curses 例程,例如 napms(),在成功時(shí)將返回 OK。

curses.version?

一個(gè)代表當(dāng)前模塊版本的字節(jié)串對(duì)象。 也作 __version__。

curses.ncurses_version?

一個(gè)具名元組,它包含構(gòu)成 ncurses 庫(kù)版本號(hào)的三個(gè)數(shù)字: major, minorpatch。 三個(gè)值均為整數(shù)。 三個(gè)值也可通過名稱來訪問,因此 curses.ncurses_version[0] 等價(jià)于 curses.ncurses_version.major,依此類推。

可用性:如果使用了 ncurses 庫(kù)。

3.8 新版功能.

有些常量可用于指定字符單元屬性。 實(shí)際可用的常量取決于具體的系統(tǒng)。

屬性

含意

A_ALTCHARSET

備用字符集模式

A_BLINK

閃爍模式

A_BOLD

粗體模式

A_DIM

暗淡模式

A_INVIS

不可見或空白模式

A_ITALIC

斜體模式

A_NORMAL

正常屬性

A_PROTECT

保護(hù)模式

A_REVERSE

反轉(zhuǎn)背景色和前景色

A_STANDOUT

突出模式

A_UNDERLINE

下劃線模式

A_HORIZONTAL

水平突出顯示

A_LEFT

左高亮

A_LOW

底部高亮

A_RIGHT

右高亮

A_TOP

頂部高亮

A_VERTICAL

垂直突出顯示

A_CHARTEXT

用于提取字符的位掩碼

3.7 新版功能: A_ITALIC was added.

有幾個(gè)常量可用于提取某些方法返回的相應(yīng)屬性。

位掩碼

含意

A_ATTRIBUTES

用于提取屬性的位掩碼

A_CHARTEXT

用于提取字符的位掩碼

A_COLOR

用于提取顏色對(duì)字段信息的位掩碼

鍵由名稱以 KEY_ 開頭的整數(shù)常量引用。確切的可用鍵取決于系統(tǒng)。

關(guān)鍵常數(shù)

KEY_MIN

最小鍵值

KEY_BREAK

中斷鍵(不可靠)

KEY_DOWN

向下箭頭

KEY_UP

向上箭頭

KEY_LEFT

向左箭頭

KEY_RIGHT

向右箭頭

KEY_HOME

Home 鍵 (上+左箭頭)

KEY_BACKSPACE

退格(不可靠)

KEY_F0

功能鍵。 支持至多 64 個(gè)功能鍵。

KEY_Fn

功能鍵 n 的值

KEY_DL

刪除行

KEY_IL

插入行

KEY_DC

刪除字符

KEY_IC

插入字符或進(jìn)入插入模式

KEY_EIC

退出插入字符模式

KEY_CLEAR

清空屏幕

KEY_EOS

清空至屏幕底部

KEY_EOL

清空至行尾

KEY_SF

向前滾動(dòng) 1 行

KEY_SR

向后滾動(dòng) 1 行 (反轉(zhuǎn))

KEY_NPAGE

下一頁(yè)

KEY_PPAGE

上一頁(yè)

KEY_STAB

設(shè)置制表符

KEY_CTAB

清除制表符

KEY_CATAB

清除所有制表符

KEY_ENTER

回車或發(fā)送 (不可靠)

KEY_SRESET

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

KEY_RESET

重置或硬重置 (不可靠)

KEY_PRINT

打印

KEY_LL

Home 向下或到底 (左下)

KEY_A1

鍵盤的左上角

KEY_A3

鍵盤的右上角

KEY_B2

鍵盤的中心

KEY_C1

鍵盤左下方

KEY_C3

鍵盤右下方

KEY_BTAB

回退制表符

KEY_BEG

Beg (開始)

KEY_CANCEL

取消

KEY_CLOSE

關(guān)閉

KEY_COMMAND

Cmd (命令行)

KEY_COPY

復(fù)制

KEY_CREATE

創(chuàng)建

KEY_END

End

KEY_EXIT

退出

KEY_FIND

查找

KEY_HELP

幫助

KEY_MARK

標(biāo)記

KEY_MESSAGE

消息

KEY_MOVE

移動(dòng)

KEY_NEXT

下一個(gè)

KEY_OPEN

打開

KEY_OPTIONS

選項(xiàng)

KEY_PREVIOUS

Prev (上一個(gè))

KEY_REDO

重做

KEY_REFERENCE

Ref (引用)

KEY_REFRESH

刷新

KEY_REPLACE

替換

KEY_RESTART

重啟

KEY_RESUME

恢復(fù)

KEY_SAVE

保存

KEY_SBEG

Shift + Beg (開始)

KEY_SCANCEL

Shift + Cancel

KEY_SCOMMAND

Shift + Command

KEY_SCOPY

Shift + Copy

KEY_SCREATE

Shift + Create

KEY_SDC

Shift + 刪除字符

KEY_SDL

Shift + 刪除行

KEY_SELECT

選擇

KEY_SEND

Shift + End

KEY_SEOL

Shift + 清空行

KEY_SEXIT

Shift + 退出

KEY_SFIND

Shift + 查找

KEY_SHELP

Shift + 幫助

KEY_SHOME

Shift + Home

KEY_SIC

Shift + 輸入

KEY_SLEFT

Shift + 向左箭頭

KEY_SMESSAGE

Shift + 消息

KEY_SMOVE

Shift + 移動(dòng)

KEY_SNEXT

Shift + 下一個(gè)

KEY_SOPTIONS

Shift + 選項(xiàng)

KEY_SPREVIOUS

Shift + 上一個(gè)

KEY_SPRINT

Shift + 打印

KEY_SREDO

Shift + 重做

KEY_SREPLACE

Shift + 替換

KEY_SRIGHT

Shift + 向右箭頭

KEY_SRSUME

Shift + 恢復(fù)

KEY_SSAVE

Shift + 保存

KEY_SSUSPEND

Shift + 掛起

KEY_SUNDO

Shift + 撤銷

KEY_SUSPEND

掛起

KEY_UNDO

撤銷操作

KEY_MOUSE

鼠標(biāo)事件已發(fā)生

KEY_RESIZE

終端大小改變事件

KEY_MAX

最大鍵值

在VT100及其軟件仿真(例如X終端仿真器)上,通常至少有四個(gè)功能鍵( KEY_F1, KEY_F2, KEY_F3, KEY_F4 )可用,并且箭頭鍵以明顯的方式映射到 KEY_UP, KEY_DOWN, KEY_LEFTKEY_RIGHT 。如果您的機(jī)器有一個(gè)PC鍵盤,可以安全地使用箭頭鍵和十二個(gè)功能鍵(舊的PC鍵盤可能只有十個(gè)功能鍵);此外,以下鍵盤映射是標(biāo)準(zhǔn)的:

鍵帽

常量

Insert

KEY_IC

Delete

KEY_DC

Home

KEY_HOME

End

KEY_END

Page Up

KEY_PPAGE

Page Down

KEY_NPAGE

下表列出了替代字符集中的字符。 這些字符繼承自 VT100 終端,在 X 終端等軟件模擬器上通常均為可用。 當(dāng)沒有可用的圖形時(shí),curses 會(huì)回退為粗糙的可打印 ASCII 近似符號(hào)。

備注

只有在調(diào)用 initscr() 之后才能使用它們

ACS代碼

含意

ACS_BBSS

右上角的別名

ACS_BLOCK

實(shí)心方塊

ACS_BOARD

正方形

ACS_BSBS

水平線的別名

ACS_BSSB

左上角的別名

ACS_BSSS

頂部 T 型的別名

ACS_BTEE

底部 T 型

ACS_BULLET

正方形

ACS_CKBOARD

棋盤(點(diǎn)刻)

ACS_DARROW

向下箭頭

ACS_DEGREE

等級(jí)符

ACS_DIAMOND

菱形

ACS_GEQUAL

大于或等于

ACS_HLINE

水平線

ACS_LANTERN

燈形符號(hào)

ACS_LARROW

向左箭頭

ACS_LEQUAL

小于或等于

ACS_LLCORNER

左下角

ACS_LRCORNER

右下角

ACS_LTEE

左側(cè) T 型

ACS_NEQUAL

不等號(hào)

ACS_PI

字母π

ACS_PLMINUS

正負(fù)號(hào)

ACS_PLUS

加號(hào)

ACS_RARROW

向右箭頭

ACS_RTEE

右側(cè) T 型

ACS_S1

掃描線 1

ACS_S3

掃描線3

ACS_S7

掃描線7

ACS_S9

掃描線 9

ACS_SBBS

右下角的別名

ACS_SBSB

垂直線的別名

ACS_SBSS

右側(cè) T 型的別名

ACS_SSBB

左下角的別名

ACS_SSBS

底部 T 型的別名

ACS_SSSB

左側(cè) T 型的別名

ACS_SSSS

交叉或大加號(hào)的替代名稱

ACS_STERLING

英鎊

ACS_TTEE

頂部 T 型

ACS_UARROW

向上箭頭

ACS_ULCORNER

左上角

ACS_URCORNER

右上角

ACS_VLINE

垂線

下表列出了預(yù)定義的顏色:

常量

顏色

COLOR_BLACK

黑色

COLOR_BLUE

藍(lán)色

COLOR_CYAN

青色(淺綠藍(lán)色)

COLOR_GREEN

綠色

COLOR_MAGENTA

洋紅色(紫紅色)

COLOR_RED

紅色

COLOR_WHITE

白色

COLOR_YELLOW

黃色

curses.textpad --- 用于 curses 程序的文本輸入控件?

curses.textpad 模塊提供了一個(gè) Textbox 類,該類在 curses 窗口中處理基本的文本編輯,支持一組與 Emacs 類似的鍵綁定(因此這也適用于 Netscape Navigator, BBedit 6.x, FrameMaker 和許多其他程序)。 該模塊還提供了一個(gè)繪制矩形的函數(shù),適用于容納文本框或其他目的。

curses.textpad 模塊定義了以下函數(shù):

curses.textpad.rectangle(win, uly, ulx, lry, lrx)?

繪制一個(gè)矩形。 第一個(gè)參數(shù)必須為窗口對(duì)象;其余參數(shù)均為相對(duì)于該窗口的坐標(biāo)值。 第二和第三個(gè)參數(shù)為要繪制的矩形的左上角的 y 和 x 坐標(biāo)值;第四和第五個(gè)參數(shù)為其右下角的 y 和 x 坐標(biāo)值。 將會(huì)使用 VT100/IBM PC 形式的字符在可用的終端上(包括 xterm 和大多數(shù)其他軟件終端模擬器)繪制矩形。 在其他情況下則將使用 ASCII 橫杠、豎線和加號(hào)繪制。

文本框?qū)ο?a title="永久鏈接至標(biāo)題" class="headerlink" href="#textbox-objects">?

你可以通過如下方式實(shí)例化一個(gè) Textbox:

class curses.textpad.Textbox(win)?

返回一個(gè)文本框控件對(duì)象。 win 參數(shù)必須是一個(gè) curses 窗口 對(duì)象,文本框?qū)⒈话谄渲小?文本框的編輯光標(biāo)在初始時(shí)位于包含窗口的左上角,坐標(biāo)值為 (0, 0)。 實(shí)例的 stripspaces 旗標(biāo)初始時(shí)為啟用。

Textbox 對(duì)象具有以下方法:

edit([validator])?

這是你通常將使用的入口點(diǎn)。 它接受編輯按鍵直到鍵入了一個(gè)終止按鍵。 如果提供了 validator,它必須是一個(gè)函數(shù)。 它將在每次按鍵時(shí)被調(diào)用并傳入相應(yīng)的按鍵作作為形參;命令發(fā)送將在結(jié)果上執(zhí)行。 此方法會(huì)以字符串形式返回窗口內(nèi)容;是否包括窗口中的空白將受到 stripspaces 屬性的影響。

do_command(ch)?

處理單個(gè)按鍵命令。以下是支持的特殊按鍵:

按鍵

動(dòng)作

Control-A

轉(zhuǎn)到窗口的左邊緣。

Control-B

光標(biāo)向左,如果可能,包含前一行。

Control-D

刪除光標(biāo)下的字符。

Control-E

前往右邊緣(stripspaces 關(guān)閉時(shí))或者行尾(stripspaces 啟用時(shí))。

Control-F

向右移動(dòng)光標(biāo),適當(dāng)時(shí)換行到下一行。

Control-G

終止,返回窗口內(nèi)容。

Control-H

向后刪除字符。

Control-J

如果窗口是1行則終止,否則插入換行符。

Control-K

如果行為空,則刪除它,否則清除到行尾。

Control-L

刷新屏幕。

Control-N

光標(biāo)向下;向下移動(dòng)一行。

Control-O

在光標(biāo)位置插入一個(gè)空行。

Control-P

光標(biāo)向上;向上移動(dòng)一行。

如果光標(biāo)位于無(wú)法移動(dòng)的邊緣,則移動(dòng)操作不執(zhí)行任何操作。在可能的情況下,支持以下同義詞:

常量

按鍵

KEY_LEFT

Control-B

KEY_RIGHT

Control-F

KEY_UP

Control-P

KEY_DOWN

Control-N

KEY_BACKSPACE

Control-h

所有其他按鍵將被視為插入給定字符并右移的命令(帶有自動(dòng)折行)。

gather()?

以字符串形式返回窗口內(nèi)容;是否包括窗口中的空白將受到 stripspaces 成員的影響。

stripspaces?

此屬性是控制窗口中空白解讀方式的旗標(biāo)。 當(dāng)啟用時(shí),每一行的末尾空白會(huì)被忽略;任何將光標(biāo)定位至末尾空白的光標(biāo)動(dòng)作都將改為前往該行末尾,并且在收集窗口內(nèi)容時(shí)將去除末尾空白。