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


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

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

備注

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

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

參見

模塊 curses.ascii

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

模塊 curses.panel

為 curses 窗口添加深度的面板棧擴展。

模塊 curses.textpad

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

用 Python 進行 Curses 編程

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

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

函數(shù)?

curses 模塊定義了以下異常:

exception curses.error?

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

備注

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

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

curses.baudrate()?

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

curses.beep()?

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

curses.can_change_color()?

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

curses.cbreak()?

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

curses.color_content(color_number)?

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

curses.color_pair(pair_number)?

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

curses.curs_set(visibility)?

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

curses.def_prog_mode()?

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

curses.def_shell_mode()?

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

curses.delay_output(ms)?

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

curses.doupdate()?

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

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

curses.echo()?

進入 echo 模式。 在 echo 模式下,輸入的每個字符都會在輸入后回顯到屏幕上。

curses.endwin()?

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

curses.erasechar()?

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

curses.filter()?

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

curses.flash()?

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

curses.flushinp()?

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

curses.getmouse()?

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

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

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)建并初始化一個新窗口,并返回該新窗口對象。

curses.has_colors()?

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

curses.has_extended_color_support()?

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

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

3.10 新版功能.

curses.has_ic()?

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

curses.has_il()?

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

curses.has_key(ch)?

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

curses.halfdelay(tenths)?

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

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

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

curses.init_pair(pair_number, fg, bg)?

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

curses.initscr()?

初始化庫。 返回代表整個屏幕的 窗口 對象。

備注

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

curses.is_term_resized(nlines, ncols)?

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

curses.isendwin()?

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

curses.keyname(k)?

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

curses.killchar()?

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

curses.longname()?

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

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

curses.napms(ms)?

休眠 ms 毫秒。

curses.newpad(nlines, ncols)?

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

面板類似于窗口,區(qū)別在于它不受屏幕大小的限制,并且不必與屏幕的特定部分相關(guān)聯(lián)。 面板可以在需要使用大窗口時使用,并且每次只需將窗口的一部分放在屏幕上。 面板不會發(fā)生自動刷新(例如由于滾動或輸入回顯)。 面板的 refresh()noutrefresh() 方法需要 6 個參數(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)

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

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

curses.nl()?

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

curses.nocbreak()?

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

curses.noecho()?

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

curses.nonl()?

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

curses.noqiflush()?

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

curses.noraw()?

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

curses.pair_content(pair_number)?

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

curses.pair_number(attr)?

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

curses.putp(str)?

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

curses.qiflush([flag])?

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

curses.raw()?

進入 raw 模式。 在 raw 模式下,正常的行緩沖和對中斷、退出、掛起和流程控制鍵的處理會被關(guān)閉;字符會被逐個地提交給 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() 時的狀態(tài)。

curses.resize_term(nlines, ncols)?

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

curses.resizeterm(nlines, ncols)?

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

curses.savetty()?

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

curses.get_escdelay()?

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

3.9 新版功能.

curses.set_escdelay(ms)?

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

3.9 新版功能.

curses.get_tabsize()?

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

3.9 新版功能.

curses.set_tabsize(size)?

設(shè)置 curses 庫在將制表符添加到窗口時將制表符轉(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 為給出終端名稱的字符串或為 None;如果省略或為 None,則將使用 TERM 環(huán)境變量的值。 fd 是任何初始化序列將被發(fā)送到的文件描述符;如未指定或為 -1,則將使用 sys.stdout 的文件描述符。

curses.start_color()?

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

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

curses.termattrs()?

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

curses.termname()?

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

curses.tigetflag(capname)?

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

curses.tigetnum(capname)?

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

curses.tigetstr(capname)?

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

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

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

curses.typeahead(fd)?

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

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

curses.unctrl(ch)?

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

curses.ungetch(ch)?

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

備注

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

curses.update_lines_cols()?

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

3.5 新版功能.

curses.unget_wch(ch)?

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

備注

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

3.3 新版功能.

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

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

curses.use_env(flag)?

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

curses.use_default_colors()?

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

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

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

Window 對象?

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

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

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

備注

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

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

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

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

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

備注

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

  • 此 Python 模塊的后端 ncurses 中的一個缺陷 會在調(diào)整窗口大小時導(dǎo)致段錯誤。 此缺陷已在 ncurses-6.1-20190511 中被修復(fù)。 如果你必須使用較早版本的 ncurses,則你只要在調(diào)用 addstr() 時不傳入嵌入了換行符的 str 即可避免觸發(fā)此錯誤。 請為每一行分別調(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。 該集合初始時為 0 (無屬性)。

window.bkgd(ch[, attr])?

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

  • 窗口中每個字符的屬性會被修改為新的 background 屬性。

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

window.bkgdset(ch[, attr])?

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

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

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

備注

任何形參的值為 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ù)總是會使用默認(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 個字符的屬性。 如果 num 未給出或為 -1,則將屬性設(shè)置到所有字符上直至行尾。 如果提供了位置 (y, x) 則此函數(shù)會將光標(biāo)移至該位置。 修改過的行將使用 touchline() 方法處理以便下次窗口刷新時內(nèi)容會重新顯示。

window.clear()?

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

window.clearok(flag)?

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

window.clrtobot()?

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

window.clrtoeol()?

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

window.cursyncup()?

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

window.delch([y, x])?

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

window.deleteln()?

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

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

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

window.echochar(ch[, attr])?

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

window.enclose(y, x)?

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

在 3.10 版更改: 在之前版本中它會返回 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)前背景字符/屬性對。

window.getch([y, x])?

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

window.get_wch([y, x])?

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

3.3 新版功能.

window.getkey([y, x])?

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

window.getmaxyx()?

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

window.getparyx()?

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

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

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

window.getyx()?

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

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

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

window.idcok(flag)?

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

window.idlok(flag)?

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

window.immedok(flag)?

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

window.inch([y, x])?

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

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

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

window.insdelln(nlines)?

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

window.insertln()?

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

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

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

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

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

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

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

window.is_linetouched(line)?

如果指定的行自上次調(diào)用 refresh() 后發(fā)生了改變則返回 True;否則返回 False。 如果 line 對于給定的窗口不可用則會引發(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,則在更新時光標(biāo)將停留在原地,而不是在“光標(biāo)位置”。 這將可以減少光標(biāo)的移動。 在可能的情況下光標(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)移動。 窗口相對于屏幕的參數(shù)不會被更改。 此例程用于在屏幕的相同物理位置顯示父窗口的不同部分。

window.mvwin(new_y, new_x)?

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

window.nodelay(flag)?

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

window.notimeout(flag)?

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

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

window.noutrefresh()?

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

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

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

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

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

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

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

window.putwin(file)?

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

window.redrawln(beg, num)?

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

window.redrawwin()?

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

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

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

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

window.resize(nlines, ncols)?

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

window.scroll([lines=1])?

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

window.scrollok(flag)?

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

window.setscrreg(top, bottom)?

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

window.standend()?

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

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。

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

window.syncdown()?

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

window.syncok(flag)?

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

window.syncup()?

觸碰已在窗口中被改變的此窗口的各個上級窗口中的所有位置。

window.timeout(delay)?

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

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

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

window.touchwin()?

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

window.untouchwin()?

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

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

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

常量?

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

curses.ERR?

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

curses.OK?

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

curses.version?

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

curses.ncurses_version?

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

可用性:如果使用了 ncurses 庫。

3.8 新版功能.

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

屬性

含意

A_ALTCHARSET

備用字符集模式

A_BLINK

閃爍模式

A_BOLD

粗體模式

A_DIM

暗淡模式

A_INVIS

不可見或空白模式

A_ITALIC

斜體模式

A_NORMAL

正常屬性

A_PROTECT

保護模式

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.

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

位掩碼

含意

A_ATTRIBUTES

用于提取屬性的位掩碼

A_CHARTEXT

用于提取字符的位掩碼

A_COLOR

用于提取顏色對字段信息的位掩碼

鍵由名稱以 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 個功能鍵。

KEY_Fn

功能鍵 n 的值

KEY_DL

刪除行

KEY_IL

插入行

KEY_DC

刪除字符

KEY_IC

插入字符或進入插入模式

KEY_EIC

退出插入字符模式

KEY_CLEAR

清空屏幕

KEY_EOS

清空至屏幕底部

KEY_EOL

清空至行尾

KEY_SF

向前滾動 1 行

KEY_SR

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

KEY_NPAGE

下一頁

KEY_PPAGE

上一頁

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

移動

KEY_NEXT

下一個

KEY_OPEN

打開

KEY_OPTIONS

選項

KEY_PREVIOUS

Prev (上一個)

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 + 移動

KEY_SNEXT

Shift + 下一個

KEY_SOPTIONS

Shift + 選項

KEY_SPREVIOUS

Shift + 上一個

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終端仿真器)上,通常至少有四個功能鍵( KEY_F1, KEY_F2, KEY_F3, KEY_F4 )可用,并且箭頭鍵以明顯的方式映射到 KEY_UP, KEY_DOWN, KEY_LEFTKEY_RIGHT 。如果您的機器有一個PC鍵盤,可以安全地使用箭頭鍵和十二個功能鍵(舊的PC鍵盤可能只有十個功能鍵);此外,以下鍵盤映射是標(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)沒有可用的圖形時,curses 會回退為粗糙的可打印 ASCII 近似符號。

備注

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

ACS代碼

含意

ACS_BBSS

右上角的別名

ACS_BLOCK

實心方塊

ACS_BOARD

正方形

ACS_BSBS

水平線的別名

ACS_BSSB

左上角的別名

ACS_BSSS

頂部 T 型的別名

ACS_BTEE

底部 T 型

ACS_BULLET

正方形

ACS_CKBOARD

棋盤(點刻)

ACS_DARROW

向下箭頭

ACS_DEGREE

等級符

ACS_DIAMOND

菱形

ACS_GEQUAL

大于或等于

ACS_HLINE

水平線

ACS_LANTERN

燈形符號

ACS_LARROW

向左箭頭

ACS_LEQUAL

小于或等于

ACS_LLCORNER

左下角

ACS_LRCORNER

右下角

ACS_LTEE

左側(cè) T 型

ACS_NEQUAL

不等號

ACS_PI

字母π

ACS_PLMINUS

正負(fù)號

ACS_PLUS

加號

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

交叉或大加號的替代名稱

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

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

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

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

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

你可以通過如下方式實例化一個 Textbox:

class curses.textpad.Textbox(win)?

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

Textbox 對象具有以下方法:

edit([validator])?

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

do_command(ch)?

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

按鍵

動作

Control-A

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

Control-B

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

Control-D

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

Control-E

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

Control-F

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

Control-G

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

Control-H

向后刪除字符。

Control-J

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

Control-K

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

Control-L

刷新屏幕。

Control-N

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

Control-O

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

Control-P

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

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

常量

按鍵

KEY_LEFT

Control-B

KEY_RIGHT

Control-F

KEY_UP

Control-P

KEY_DOWN

Control-N

KEY_BACKSPACE

Control-h

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

gather()?

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

stripspaces?

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