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é)字符串。
注解
從 5.4 版本開始,ncurses 庫(kù)使用 nl_langinfo 函數(shù)來(lái)決定如何解釋非 ASCII 數(shù)據(jù)。這意味著你需要在程序中調(diào)用 locale.setlocale() 函數(shù),并使用一種系統(tǒng)中可用的編碼方法來(lái)編碼 Unicode 字符串。這個(gè)例子使用了系統(tǒng)默認(rèn)的編碼:
import locale
locale.setlocale(locale.LC_ALL, '')
code = locale.getpreferredencoding()
然后使用 code 作為 str.encode() 調(diào)用的編碼。
參見
- 模塊
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ù)或方法的 x 或 y 參數(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ù)線路速度來(lái)改變接口。
-
curses.beep()? 發(fā)出短促的提醒聲音。
-
curses.can_change_color()? 根據(jù)程序員能否改變終端顯示的顏色返回
True或False。
-
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)度值必須介于
0和COLORS之間。 返回一個(gè) 3 元組,其中包含給定顏色的 R,G,B 值,它們必須介于0(無(wú)分量) 和1000(最大分量) 之間。
-
curses.color_pair(color_number)? 返回用于顯示指定顏色的文本的屬性值。 該屬性值可與
A_STANDOUT,A_REVERSE以及其他A_*屬性組合使用。pair_number()是此函數(shù)的對(duì)應(yīng)操作。
-
curses.curs_set(visibility)? 設(shè)置光標(biāo)狀態(tài)。 visibility 可設(shè)為
0,1或2表示不可見、正常與高度可見。 如果終端支持所請(qǐng)求的可見性,則返回之前的光標(biāo)狀態(tài);否則會(huì)引發(fā)異常。 在許多終端上,“正常可見”模式為下劃線光標(biāo)而“高度可見”模式為方塊形光標(biāo)。
-
curses.def_prog_mode()? 將當(dāng)前終端模式保存為 "program" 模式,即正在運(yùn)行的程序使用 curses 時(shí)的模式。 (與其相對(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()整體更新物理屏幕以匹配虛擬屏幕。虛擬屏幕可以通過(guò)在寫入操作例如在一個(gè)窗口上執(zhí)行
addstr()之后調(diào)用noutrefresh()來(lái)刷新。 普通的refresh()調(diào)用只是簡(jiǎn)單的noutrefresh()加doupdate();如果你需要更新多個(gè)窗口,你可以通過(guò)在所有窗口上發(fā)出noutrefresh()調(diào)用再加單次doupdate()來(lái)提升性能并可減少屏幕閃爍。
-
curses.echo()? 進(jìn)入 echo 模式。 在 echo 模式下,輸入的每個(gè)字符都會(huì)在輸入后回顯到屏幕上。
-
curses.endwin()? 撤銷庫(kù)的初始化,使終端返回正常狀態(tài)。
-
curses.erasechar()? 將用戶的當(dāng)前擦除字符以單字節(jié)字節(jié)串對(duì)象的形式返回。 在 Unix 操作系統(tǒng)下這是 curses 程序用來(lái)控制 tty 的屬性,而不是由 curses 庫(kù)本身來(lái)設(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()? After
getch()returnsKEY_MOUSEto signal a mouse event, this method should be call to retrieve the queued mouse event, represented as a 5-tuple(id, x, y, z, bstate). id is an ID value used to distinguish multiple devices, and x, y, z are the event's coordinates. (z is currently unused.) bstate is an integer value whose bits will be set to indicate the type of event, and will be the bitwise OR of one or more of the following constants, where n is the button number from 1 to 4:BUTTONn_PRESSED,BUTTONn_RELEASED,BUTTONn_CLICKED,BUTTONn_DOUBLE_CLICKED,BUTTONn_TRIPLE_CLICKED,BUTTON_SHIFT,BUTTON_CTRL,BUTTON_ALT.
-
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_ic()? 如果終端具有插入和刪除字符的功能則返回
True。 此函數(shù)僅是出于歷史原因而被包括的,因?yàn)樗鞋F(xiàn)代軟件終端模擬器都具有這些功能。
-
curses.has_il()? 如果終端具有插入和刪除字符功能,或者能夠使用滾動(dòng)區(qū)域來(lái)模擬這些功能則返回
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 值必須為
1和255之間的數(shù)字。 使用nocbreak()可退出半延遲模式。
-
curses.init_color(color_number, r, g, b)? 更改某個(gè)顏色的定義,接受要更改的顏色編號(hào)以及三個(gè) RGB 值(表示紅綠藍(lán)三分量的強(qiáng)度)。 color_number 值必須為
0和COLORS之間的數(shù)字。 r, g, b 值分別必須為0和1000之間的數(shù)字。 當(dāng)使用init_color()時(shí),出現(xiàn)在屏幕上的對(duì)應(yīng)顏色會(huì)立即按照新定義來(lái)更改。 此函數(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 值必須為
1和COLOR_PAIRS - 1之間的數(shù)字(并且0號(hào)顏色對(duì)固定為黑底白字而無(wú)法更改)。 fg 和 bg 參數(shù)值必須為0和COLORS之間的數(shù)字。 如果顏色對(duì)之前已被初始化,則屏幕會(huì)被刷新使得出現(xiàn)在屏幕上的該顏色對(duì)會(huì)立即按照新定義來(lái)更改。
-
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.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 程序用來(lái)控制 tty 的屬性,而不是由 curses 庫(kù)本身來(lái)設(shè)置的。
-
curses.longname()? 返回一個(gè)字節(jié)串對(duì)象,其中包含描述當(dāng)前終端的 terminfo 長(zhǎng)名稱字段。 詳細(xì)描述的最大長(zhǎng)度為 128 個(gè)字符。 它僅在調(diào)用
initscr()之后才會(huì)被定義。
-
curses.meta(flag)? 如果 flag 為
True,則允許輸入 8 比特位的字符。 如果 flag 為False,則只允許 7 比特位的字符。
-
curses.mouseinterval(interval)? 以毫秒為單位設(shè)置能夠被識(shí)別為點(diǎn)擊的按下和釋放事件之間可以間隔的最長(zhǎng)時(shí)間,并返回之前的間隔值。 默認(rèn)值為 200 毫秒,即五分之一秒。
-
curses.mousemask(mousemask)? 設(shè)置要報(bào)告的鼠標(biāo)事件,并返回一個(gè)元組
(availmask, oldmask)。 availmask 表明指定的鼠標(biāo)事件中哪些可以被報(bào)告;當(dāng)完全失敗時(shí)將返回0。 oldmask 是給定窗口的鼠標(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ù)來(lái)指定面板要顯示的部分以及要用于顯示的屏幕位置。 這些參數(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)入換行模式。 此模式會(huì)在輸入時(shí)將回車轉(zhuǎn)換為換行符,并在輸出時(shí)將換行符轉(zhuǎn)換為回車加換行。 換行模式會(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,QUIT和SUSP字符相關(guān)聯(lián)的輸入和輸出隊(duì)列的正常刷新將不會(huì)被執(zhí)行。 如果你希望在處理程序退出后還能繼續(xù)輸出,就像沒有發(fā)生過(guò)中斷一樣,你可能會(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 的值必須在1和COLOR_PAIRS - 1之間。
-
curses.pair_number(attr)? 返回通過(guò)屬性值 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])? 如果 flag 為
False,則效果與調(diào)用noqiflush()相同。 如果 flag 為True或未提供參數(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.resize_term(nlines, ncols)? 由
resizeterm()用來(lái)執(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.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è)全局變量COLORS和COLOR_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í)通過(guò)定期查找預(yù)輸入來(lái)執(zhí)行 "斷行優(yōu)化"。 如果找到了輸入,并且輸入是來(lái)自于 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.update_lines_cols()? 更新
LINES和COLS。 適用于檢測(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) flag 為False時(shí),將會(huì)使用在 terminfo 數(shù)據(jù)庫(kù)中指定的行和列的值,即使設(shè)置了環(huán)境變量LINES和COLUMNS(默認(rèn)使用),或者如果 curses 是在窗口中運(yùn)行(在此情況下如果未設(shè)置LINES和COLUMNS則默認(rèn)行為將是使用窗口大?。?。
-
curses.use_default_colors()? 允許在支持此特性的終端上使用默認(rèn)的顏色值。 使用此函數(shù)可在你的應(yīng)用程序中支持透明效果。 默認(rèn)顏色會(huì)被賦給顏色編號(hào)
-1。 舉例來(lái)說(shuō),在調(diào)用此函數(shù)后,init_pair(x, curses.COLOR_RED, -1)會(huì)將顏色對(duì) x 初始化為紅色前景和默認(rèn)顏色背景。
-
curses.wrapper(func, ...)? 初始化 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]) Paint character ch at
(y, x)with attributes attr, overwriting any character previously painter at that location. By default, the character position and attributes are the current settings for the window object.注解
在窗口、子窗口或面板之外寫入會(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ā)。
-
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_VLINErs
右側(cè)
ACS_VLINEts
頂部
ACS_HLINEbs
底部
ACS_HLINEtl
左上角
ACS_ULCORNERtr
右上角
ACS_URCORNERbl
左下角
ACS_LLCORNERbr
右下角
ACS_LRCORNER
-
window.box([vertch, horch])? 類似于
border(),但 ls 和 rs 均為 vertch 而 ts 和 bs 均為 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)移至該位置。 修改過(guò)的行將使用touchline()方法處理以便下次窗口刷新時(shí)內(nèi)容會(huì)重新顯示。
-
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_y 和 begin_x 是想對(duì)于窗口的初始位置,而不是相對(duì)于整個(gè)屏幕。 返回代表所派生窗口的窗口對(duì)象。
-
window.enclose(y, x)? 檢測(cè)給定的相對(duì)屏幕的字符-單元格坐標(biāo)是否被給定的窗口所包圍,返回
True或False。 它適用于確定是哪個(gè)屏幕窗口子集包圍著某個(gè)鼠標(biāo)事件的位置。
-
window.encoding? 用于編碼方法參數(shù)(Unicode 字符串和字符)的編碼格式。 encoding 屬性是在創(chuàng)建子窗口時(shí)從父窗口繼承的,例如通過(guò)
window.subwin()。 默認(rèn)情況下,會(huì)使用當(dāng)前區(qū)域的編碼格式 (參見locale.getpreferredencoding())。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ú)延遲模式下,如果沒有輸入則返回一個(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)? 如果 flag 為
False,curses 將不再考慮使用終端的硬件插入/刪除字符功能;如果 flag 為True,則會(huì)啟用字符插入和刪除。 當(dāng) curses 首次初始化時(shí),默認(rèn)會(huì)啟用字符插入/刪除。
-
window.immedok(flag)? 如果 flag 為
True,窗口圖像中的任何改變都會(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ì)從字符中去除。 如果指定了 n,
instr()將返回長(zhǎng)度至多為 n 個(gè)字符的字符串(不包括末尾的 NUL)。
-
window.is_linetouched(line)? 如果指定的行自上次調(diào)用
refresh()后發(fā)生了改變則返回True;否則返回False。 如果 line 對(duì)于給定的窗口不可用則會(huì)引發(fā)curses.error異常。
-
window.keypad(flag)? 如果 flag 為
True,則某些鍵(小鍵盤鍵、功能鍵等)生成的轉(zhuǎn)義序列將由curses來(lái)解析。 如果 flag 為False,轉(zhuǎn)義序列將保持在輸入流中的原樣。
-
window.leaveok(flag)? 如果 flag 為
True,則在更新時(shí)光標(biāo)將停留在原地,而不是在“光標(biāo)位置”。 這將可以減少光標(biāo)的移動(dòng)。 在可能的情況下光標(biāo)將變?yōu)椴豢梢姟?/p>如果 flag 為
False,光標(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.notimeout(flag)? 如果 flag 為
True,則轉(zhuǎn)義序列將不會(huì)發(fā)生超時(shí)。如果 flag 為
False,則在幾毫秒之后,轉(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()的第二種形式。 sminrow 和 smincol 是源窗口的左上角坐標(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()的第二種形式。 sminrow 和 smincol 是源窗口的左上角坐標(biāo),而其他變量則在目標(biāo)窗口中標(biāo)記出一個(gè)矩形。
-
window.putwin(file)? 將關(guān)聯(lián)到窗口的所有數(shù)據(jù)寫入到所提供的文件對(duì)象。 此信息可在以后使用
getwin()函數(shù)來(lái)提取。
-
window.redrawln(beg, num)? 指明從 beg 行開始的 num 個(gè)屏幕行已被破壞并且應(yīng)當(dāng)在下次
refresh()調(diào)用時(shí)完全重繪。
-
window.refresh([pminrow, pmincol, sminrow, smincol, smaxrow, smaxcol])? 立即更新顯示(將實(shí)際屏幕與之前的繪制/刪除方法進(jìn)行同步)。
6 個(gè)可選參數(shù)僅在窗口為使用
newpad()創(chuàng)建的面板時(shí)可被指定。 需要額外的形參來(lái)指定所涉及到的是面板和屏幕的哪一部分。 pminrow 和 pmincol 指定要在面板中顯示的矩形的左上角。 sminrow, smincol, smaxrow 和 smaxcol 指定要在屏幕中顯示的矩形的邊。 要在面板中顯示的矩形的右下角是根據(jù)屏幕坐標(biāo)計(jì)算出來(lái)的,由于矩形的大小必須相同。 兩個(gè)矩形都必須完全包含在其各自的結(jié)構(gòu)之內(nèi)。 負(fù)的 pminrow, pmincol, sminrow 或 smincol 值會(huì)被視為將它們?cè)O(shè)為零值。
-
window.resize(nlines, ncols)? 為 curses 窗口重新分配存儲(chǔ)空間以將其尺寸調(diào)整為指定的值。 如果任一維度的尺寸大于當(dāng)前值,則窗口的數(shù)據(jù)將以具有合并了當(dāng)前背景渲染(由
bkgdset()設(shè)置)的空白來(lái)填充。
-
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é)果。 如果 flag 為
False,光標(biāo)會(huì)留在底端行。 如果 flag 為True,窗口會(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.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.vline(ch, n)? -
window.vline(y, x, ch, n) 顯示一條起始于
(y, x)長(zhǎng)度為 n 個(gè)字符 ch 的垂直線。
常量?
curses 模塊定義了以下數(shù)據(jù)成員:
-
curses.version? 一個(gè)代表當(dāng)前模塊版本的字節(jié)串對(duì)象。 也作
__version__。
有些常量可用于指定字符單元屬性。 實(shí)際可用的常量取決于具體的系統(tǒng)。
屬性 |
含義 |
|---|---|
|
備用字符集模式 |
|
閃爍模式 |
|
粗體模式 |
|
暗淡模式 |
|
不可見或空白模式 |
|
斜體模式 |
|
正常屬性 |
|
保護(hù)模式 |
|
反轉(zhuǎn)背景色和前景色 |
|
突出模式 |
|
下劃線模式 |
|
水平突出顯示 |
|
左高亮 |
|
底部高亮 |
|
右高亮 |
|
頂部高亮 |
|
垂直突出顯示 |
|
用于提取字符的位掩碼 |
3.7 新版功能: A_ITALIC was added.
有幾個(gè)常量可用于提取某些方法返回的相應(yīng)屬性。
位掩碼 |
含義 |
|---|---|
|
用于提取屬性的位掩碼 |
|
用于提取字符的位掩碼 |
|
用于提取顏色對(duì)字段信息的位掩碼 |
鍵由名稱以 KEY_ 開頭的整數(shù)常量引用。確切的可用鍵取決于系統(tǒng)。
關(guān)鍵常數(shù) |
(Windows 注冊(cè)表的)鍵 |
|---|---|
|
最小鍵值 |
|
中斷鍵(不可靠) |
|
向下箭頭 |
|
向上箭頭 |
|
向左箭頭 |
|
向右箭頭 |
|
Home 鍵 (上+左箭頭) |
|
退格(不可靠) |
|
功能鍵。 支持至多 64 個(gè)功能鍵。 |
|
功能鍵 n 的值 |
|
刪除行 |
|
插入行 |
|
刪除字符 |
|
插入字符或進(jìn)入插入模式 |
|
退出插入字符模式 |
|
清空屏幕 |
|
清空至屏幕底部 |
|
清空至行尾 |
|
向前滾動(dòng) 1 行 |
|
向后滾動(dòng) 1 行 (反轉(zhuǎn)) |
|
下一頁(yè) |
|
上一頁(yè) |
|
設(shè)置制表符 |
|
清除制表制 |
|
清除所有制表符 |
|
回車或發(fā)送 (不可靠) |
|
軟件 (部分) 重置 (不可靠) |
|
重置或硬重置 (不可靠) |
|
打印 |
|
Home 向下或到底 (左下) |
|
鍵盤的左上角 |
|
鍵盤的右上角 |
|
鍵盤的中心 |
|
鍵盤左下方 |
|
鍵盤右下方 |
|
回退制表符 |
|
Beg (開始) |
|
取消 |
|
關(guān)閉 |
|
Cmd (命令行) |
|
復(fù)制 |
|
創(chuàng)建 |
|
End |
|
退出 |
|
查找 |
|
幫助 |
|
標(biāo)記 |
|
消息 |
|
移動(dòng) |
|
下一個(gè) |
|
打開 |
|
選項(xiàng) |
|
Prev (上一個(gè)) |
|
重做 |
|
Ref (引用) |
|
刷新 |
|
替換 |
|
重啟 |
|
恢復(fù) |
|
保存 |
|
Shift 的 Beg (開始) |
|
Shift 的 Cancel |
|
Shift 的 Command |
|
Shift + Copy |
|
Shift + Create |
|
Shift + 刪除字符 |
|
Shift + 刪除行 |
|
選擇 |
|
Shift + End |
|
Shift + 清空行 |
|
Shift + Exit |
|
Shift + 查找 |
|
Shift + 幫助 |
|
Shift + Home |
|
Shift + 輸入 |
|
Shift + 向左箭頭 |
|
Shift + 消息 |
|
Shift + 移動(dòng) |
|
Shift + 下一個(gè) |
|
Shift + 選項(xiàng) |
|
Shift + 上一個(gè) |
|
Shift + 打印 |
|
Shift + 重做 |
|
Shift + 替換 |
|
Shift + 向右箭頭 |
|
Shift + 恢復(fù) |
|
Shift + 保存 |
|
Shift + 掛起 |
|
Shift + 撤銷 |
|
掛起 |
|
撤銷操作 |
|
鼠標(biāo)事件已發(fā)生 |
|
終端大小改變事件 |
|
最大鍵值 |
在VT100及其軟件仿真(例如X終端仿真器)上,通常至少有四個(gè)功能鍵( KEY_F1, KEY_F2, KEY_F3, KEY_F4 )可用,并且箭頭鍵以明顯的方式映射到 KEY_UP, KEY_DOWN, KEY_LEFT 和 KEY_RIGHT 。如果您的機(jī)器有一個(gè)PC鍵盤,可以安全地使用箭頭鍵和十二個(gè)功能鍵(舊的PC鍵盤可能只有十個(gè)功能鍵);此外,以下鍵盤映射是標(biāo)準(zhǔn)的:
鍵帽 |
常數(shù) |
|---|---|
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代碼 |
含義 |
|---|---|
|
右上角的別名 |
|
實(shí)心方塊 |
|
正方形 |
|
水平線的別名 |
|
左上角的別名 |
|
頂部 T 型的別名 |
|
底部 T 型 |
|
正方形 |
|
棋盤(點(diǎn)刻) |
|
向下箭頭 |
|
等級(jí)符 |
|
菱形 |
|
大于或等于 |
|
水平線 |
|
燈形符號(hào) |
|
向左箭頭 |
|
小于或等于 |
|
左下角 |
|
右下角 |
|
左側(cè) T 型 |
|
不等號(hào) |
|
字母π |
|
正負(fù)號(hào) |
|
加號(hào) |
|
向右箭頭 |
|
右側(cè) T 型 |
|
掃描線 1 |
|
掃描線3 |
|
掃描線7 |
|
掃描線 9 |
|
右下角的別名 |
|
垂直線的別名 |
|
右側(cè) T 型的別名 |
|
左下角的別名 |
|
底部 T 型的別名 |
|
左側(cè) T 型的別名 |
|
交叉或大加號(hào)的替代名稱 |
|
英鎊 |
|
頂部 T 型 |
|
向上箭頭 |
|
左上角 |
|
右上角 |
|
垂線 |
下表列出了預(yù)定義的顏色:
常數(shù) |
顏色 |
|---|---|
|
黑色 |
|
藍(lán)色 |
|
青色(淺綠藍(lán)色) |
|
綠色 |
|
洋紅色(紫紅色) |
|
紅色 |
|
白色 |
|
黃色 |
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 class="headerlink" href="#textbox-objects" title="永久鏈接至標(biāo)題">?
你可以通過(guò)如下方式實(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í)行任何操作。在可能的情況下,支持以下同義詞:
常數(shù)
按鍵
KEY_LEFTControl-B
KEY_RIGHTControl-F
KEY_UPControl-P
KEY_DOWNControl-N
KEY_BACKSPACEControl-h
所有其他按鍵將被視為插入給定字符并右移的命令(帶有自動(dòng)折行)。
-
gather()? 以字符串形式返回窗口內(nèi)容;是否包括窗口中的空白將受到
stripspaces成員的影響。
-
stripspaces? 此屬性是控制窗口中空白解讀方式的旗標(biāo)。 當(dāng)啟用時(shí),每一行的末尾空白會(huì)被忽略;任何將光標(biāo)定位至末尾空白的光標(biāo)動(dòng)作都將改為前往該行末尾,并且在收集窗口內(nèi)容時(shí)將去除末尾空白。
-
