curses
--- 終端字符單元顯示的處理?
curses
模塊提供了 curses 庫的接口,這是可移植高級終端處理的事實標準。
雖然 curses 在 Unix 環(huán)境中使用最為廣泛,但也有適用于 Windows,DOS 以及其他可能的系統(tǒng)的版本。此擴展模塊旨在匹配 ncurses 的 API,這是一個部署在 Linux 和 Unix 的 BSD 變體上的開源 curses 庫。
備注
每當文檔提到 字符 時,它可以被指定為一個整數(shù),一個單字符 Unicode 字符串或者一個單字節(jié)的字節(jié)字符串。
每當此文檔提到 字符串 時,它可以被指定為一個 Unicode 字符串或者一個字節(jié)字符串。
參見
- 模塊
curses.ascii
在 ASCII 字符上工作的工具,無論你的區(qū)域設(shè)置是什么。
- 模塊
curses.panel
為 curses 窗口添加深度的面板棧擴展。
- 模塊
curses.textpad
用于使 curses 支持 Emacs 式綁定的可編輯文本部件。
- 用 Python 進行 Curses 編程
關(guān)于配合 Python 使用 curses 的教學材料,由 Andrew Kuchling 和 Eric Raymond 撰寫。
Python 源碼發(fā)布包的 Tools/demo/ 目錄包含了一些使用此模塊所提供的 curses 綁定的示例程序。
函數(shù)?
curses
模塊定義了以下異常:
- exception curses.error?
當 curses 庫中函數(shù)返回一個錯誤時引發(fā)的異常。
備注
只要一個函數(shù)或方法的 x 或 y 參數(shù)是可選項,它們會默認為當前光標位置。 而當 attr 是可選項時,它會默認為 A_NORMAL
。
curses
模塊定義了以下函數(shù):
- curses.baudrate()?
以每秒比特數(shù)為單位返回終端輸出速度。 在軟件終端模擬器上它將具有一個固定的最高值。 此函數(shù)出于歷史原因被包括;在以前,它被用于寫輸出循環(huán)以提供時間延遲,并偶爾根據(jù)線路速度來改變接口。
- curses.beep()?
發(fā)出短促的提醒聲音。
- curses.can_change_color()?
根據(jù)程序員能否改變終端顯示的顏色返回
True
或False
。
- 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 中紅、綠和藍(RGB)分量的強度,此強度值必須介于
0
和COLORS - 1
之間。 返回一個 3 元組,其中包含給定顏色的 R,G,B 值,它們必須介于0
(無分量) 和1000
(最大分量) 之間。
- curses.color_pair(pair_number)?
返回用于以指定顏色對顯示文本的屬性值。 僅支持前 256 個顏色對。 該屬性值可與
A_STANDOUT
,A_REVERSE
以及其他A_*
屬性組合使用。pair_number()
是此函數(shù)的對應操作。
- curses.curs_set(visibility)?
設(shè)置光標狀態(tài)。 visibility 可設(shè)為
0
,1
或2
表示不可見、正常與高度可見。 如果終端支持所請求的可見性,則返回之前的光標狀態(tài);否則會引發(fā)異常。 在許多終端上,“正常可見”模式為下劃線光標而“高度可見”模式為方塊形光標。
- curses.def_prog_mode()?
將當前終端模式保存為 "program" 模式,即正在運行的程序使用 curses 的模式。 (與其相對的是 "shell" 模式,即程序不使用 curses。) 對
reset_prog_mode()
的后續(xù)調(diào)用將恢復此模式。
- curses.def_shell_mode()?
將當前終端模式保存為 "shell" 模式,即正在運行的程序不使用 curses 的模式。 (與其相對的是 "program" 模式,即程序使用 功能。) 對
reset_shell_mode()
的后續(xù)調(diào)用將恢復此模式。
- curses.delay_output(ms)?
在輸出中插入 ms 毫秒的暫停。
- curses.doupdate()?
更新物理屏幕。 curses 庫會保留兩個數(shù)據(jù)結(jié)構(gòu),一個代表當前物理屏幕的內(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()?
將用戶的當前擦除字符以單字節(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
的值。 其影響是光標會被限制在當前行內(nèi),屏幕刷新也是如此。 這可被用于啟用單字符模式的行編輯而不觸及屏幕的其余部分。
- curses.flushinp()?
刷新所有輸入緩沖區(qū)。 這會丟棄任何已被用戶輸入但尚未被程序處理的預輸入內(nèi)容。
- curses.getmouse()?
在
getch()
返回KEY_MOUSE
以發(fā)出鼠標事件信號之后,應當調(diào)用此方法來獲取加入隊列的鼠標事件,事件以一個 5 元組(id, x, y, z, bstate)
來表示。 其中 id 為用于區(qū)分多個設(shè)備的 ID 值,而 x, y, z 為事件的坐標。 (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.getwin(file)?
讀取由之前的
putwin()
調(diào)用存放在文件中的窗口相關(guān)數(shù)據(jù)。 該例程隨后將使用該數(shù)據(jù)創(chuàng)建并初始化一個新窗口,并返回該新窗口對象。
- curses.has_colors()?
如果終端能顯示彩色則返回
True
;否則返回False
。
- curses.has_extended_color_support()?
如果此模塊支持擴展顏色則返回
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,并在當前終端類型能識別出具有該值的鍵時返回
True
。
- curses.halfdelay(tenths)?
用于半延遲模式,與 cbreak 模式的類似之處是用戶所鍵入的字符會立即對程序可用。 但是,在阻塞 tenths 個十分之一秒之后,如果還未輸入任何內(nèi)容則將引發(fā)異常。 tenths 值必須為
1
和255
之間的數(shù)字。 使用nocbreak()
可退出半延遲模式。
- curses.init_color(color_number, r, g, b)?
更改某個顏色的定義,接受要更改的顏色編號以及三個 RGB 值(表示紅綠藍三分量的強度)。 color_number 值必須為
0
和 COLORS - 1 之間的數(shù)字。 r, g, b 值必須為0
和1000
之間的數(shù)字。 當使用init_color()
時,出現(xiàn)在屏幕上的對應顏色會立即按照新定義來更改。 此函數(shù)在大多數(shù)終端上都是無操作的;它僅會在can_change_color()
返回True
時生效。
- curses.init_pair(pair_number, fg, bg)?
更改某個顏色對的定義。 它接受三個參數(shù):要更改的顏色對編號,前景色編號和背景色編號。 pair_number 值必須為
1
和COLOR_PAIRS - 1
之間的數(shù)字(并且0
號顏色對固定為黑底白字而無法更改)。 fg 和 bg 參數(shù)必須為0
和COLORS - 1
之間的數(shù)字,或者在調(diào)用use_default_colors()
之后則為-1
。 如果顏色對之前已被初始化,則屏幕會被刷新使得出現(xiàn)在屏幕上的該顏色會立即按照新定義來更改。
- curses.is_term_resized(nlines, ncols)?
如果
resize_term()
會修改窗口結(jié)構(gòu)則返回True
,否則返回False
。
- curses.keyname(k)?
將編號為 k 的鍵名稱作為字節(jié)串對象返回。 生成可打印 ASCII 字符的鍵名稱就是鍵所對應的字符。 Ctrl-鍵組合的鍵名稱則是一個兩字節(jié)的字節(jié)串對象,它由插入符 (
b'^'
) 加對應的可打印 ASCII 字符組成。 Alt-鍵組合 (128--255) 的鍵名稱則是由前綴b'M-'
加對應的可打印 ASCII 字符組成的字節(jié)串對象。
- curses.killchar()?
將用戶的當前行刪除字符以單字節(jié)字節(jié)串對象的形式返回。 在 Unix 操作系統(tǒng)下這是 curses 程序用來控制 tty 的屬性,而不是由 curses 庫本身來設(shè)置的。
- curses.longname()?
返回一個字節(jié)串對象,其中包含描述當前終端的 terminfo 長名稱字段。 詳細描述的最大長度為 128 個字符。 它僅在調(diào)用
initscr()
之后才會被定義。
- curses.meta(flag)?
如果 flag 為
True
,則允許輸入 8 比特位的字符。 如果 flag 為False
,則只允許 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è)置要報告的鼠標事件,并返回一個元組
(availmask, oldmask)
。 availmask 表明指定的鼠標事件中哪些可以被報告;當完全失敗時將返回0
。 oldmask 是給定窗口的鼠標事件之前的掩碼值。 如果從未調(diào)用此函數(shù),則不會報告任何鼠標事件。
- 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。默認情況下,窗口將從指定位置擴展到屏幕的右下角。
- 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í)行相當于回車加換行的操作)。 當停止轉(zhuǎn)換時,curses 有時能使縱向移動加快一些;并且,它將能夠在輸入時檢測回車鍵。
- curses.noqiflush()?
當使用
noqiflush()
例程時,與INTR
,QUIT
和SUSP
字符相關(guān)聯(lián)的輸入和輸出隊列的正常刷新將不會被執(zhí)行。 如果你希望在處理程序退出后還能繼續(xù)輸出,就像沒有發(fā)生過中斷一樣,你可能會想要在信號處理程序中調(diào)用noqiflush()
。
- curses.noraw()?
退出 raw 模式。 返回具有行緩沖的正常 "cooked" 模式。
- curses.pair_content(pair_number)?
返回包含對應于所請求顏色對的元組
(fg, bg)
。 pair_number 的值必須在0
和COLOR_PAIRS - 1
之間。
- curses.pair_number(attr)?
返回通過屬性值 attr 所設(shè)置的顏色對的編號。
color_pair()
是此函數(shù)的對應操作。
- curses.qiflush([flag])?
如果 flag 為
False
,則效果與調(diào)用noqiflush()
相同。 如果 flag 為True
或未提供參數(shù),則在讀取這些控制字符時隊列將被刷新。
- curses.raw()?
進入 raw 模式。 在 raw 模式下,正常的行緩沖和對中斷、退出、掛起和流程控制鍵的處理會被關(guān)閉;字符會被逐個地提交給 curses 輸入函數(shù)。
- curses.reset_prog_mode()?
將終端恢復到 "program" 模式,如之前由
def_prog_mode()
所保存的一樣。
- curses.reset_shell_mode()?
將終端恢復到 "shell" 模式,如之前由
def_shell_mode()
所保存的一樣。
- curses.resize_term(nlines, ncols)?
由
resizeterm()
用來執(zhí)行大部分工作的后端函數(shù);當調(diào)整窗口大小時,resize_term()
會以空白填充擴展區(qū)域。 調(diào)用方應用程序應當以適當?shù)臄?shù)據(jù)填充這些區(qū)域。resize_term()
函數(shù)會嘗試調(diào)整所有窗口的大小。 但是,由于面板的調(diào)用約定,在不與應用程序進行額外交互的情況下是無法調(diào)整其大小的。
- curses.resizeterm(nlines, ncols)?
將標準窗口和當前窗口的大小調(diào)整為指定的尺寸,并調(diào)整由 curses 庫所使用的記錄窗口尺寸的其他記錄數(shù)據(jù)(特別是 SIGWINCH 處理程序)。
- curses.get_escdelay()?
提取通過
set_escdelay()
設(shè)置的值。3.9 新版功能.
- curses.set_escdelay(ms)?
設(shè)置讀取一個轉(zhuǎn)義字符后要等待的毫秒數(shù),以區(qū)分在鍵盤上輸入的單個轉(zhuǎn)義字符與通過光標和功能鍵發(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.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()
會初始化八種基本顏色(黑、紅、綠、黃、藍、品、青和白)以及curses
模塊中的兩個全局變量COLORS
和COLOR_PAIRS
,其中包含終端可支持的顏色和顏色對的最大數(shù)量。 它還會將終端中的顏色恢復為終端剛啟動時的值。
- curses.termattrs()?
返回終端所支持的所有視頻屬性邏輯 OR 的值。 此信息適用于當 curses 程序需要對屏幕外觀進行完全控制的情況。
- curses.termname()?
將環(huán)境變量
TERM
的值截短至 14 個字節(jié),作為字節(jié)串對象返回。
- curses.tigetflag(capname)?
將與 terminfo 功能名稱 capname 相對應的布爾功能值以整數(shù)形式返回。 如果 capname 不是一個布爾功能則返回
-1
,如果其被取消或不存在于終端描述中則返回0
。
- curses.tigetnum(capname)?
將與 terminfo 功能名稱 capname 相對應的數(shù)字功能值以整數(shù)形式返回。 如果 capname 不是一個數(shù)字功能則返回
-2
,如果其被取消或不存在于終端描述中則返回-1
。
- curses.tigetstr(capname)?
將與 terminfo 功能名稱 capname 相對應的字符串功能值以字節(jié)串對象形式返回。 如果 capname 不是一個 terminfo "字符串功能" 或者如果其被取消或不存在于終端描述中則返回
None
。
- curses.tparm(str[, ...])?
使用提供的形參初始化字節(jié)串對象 str,其中 str 應當是從 terminfo 數(shù)據(jù)庫獲取的參數(shù)化字符串。 例如
tparm(tigetstr("cup"), 5, 3)
的結(jié)果可能為b'\033[6;4H'
,實際結(jié)果將取決于終端類型。
- curses.typeahead(fd)?
指定將被用于預輸入檢查的文件描述符 fd。 如果 fd 為
-1
,則不執(zhí)行預輸入檢查。curses 庫會在更新屏幕時通過定期查找預輸入來執(zhí)行 "斷行優(yōu)化"。 如果找到了輸入,并且輸入是來自于 tty,則會將當前更新推遲至 refresh 或 doupdate 再次被調(diào)用的時候,以便允許更快地響應預先輸入的命令。 此函數(shù)允許為預輸入檢查指定其他的文件描述符。
- curses.unctrl(ch)?
返回一個字節(jié)串對象作為字符 ch 的可打印表示形式。 控制字符會表示為一個變換符加相應的字符,例如
b'^C'
。 可打印字符則會保持原樣。
- curses.update_lines_cols()?
更新
LINES
和COLS
。 適用于檢測屏幕大小的手動調(diào)整。3.5 新版功能.
- curses.ungetmouse(id, x, y, z, bstate)?
將
KEY_MOUSE
事件推送到輸入隊列,將其與給定的狀態(tài)數(shù)據(jù)進行關(guān)聯(lián)。
- curses.use_env(flag)?
如果使用此函數(shù),則應當在調(diào)用
initscr()
或 newterm 之前調(diào)用它。 當 flag 為False
時,將會使用在 terminfo 數(shù)據(jù)庫中指定的行和列的值,即使設(shè)置了環(huán)境變量LINES
和COLUMNS
(默認使用),或者如果 curses 是在窗口中運行(在此情況下如果未設(shè)置LINES
和COLUMNS
則默認行為將是使用窗口大?。?。
- curses.use_default_colors()?
允許在支持此特性的終端上使用默認的顏色值。 使用此函數(shù)可在你的應用程序中支持透明效果。 默認顏色會被賦給顏色編號
-1
。 舉例來說,在調(diào)用此函數(shù)后,init_pair(x, curses.COLOR_RED, -1)
會將顏色對 x 初始化為紅色前景和默認顏色背景。
- curses.wrapper(func, /, *args, **kwargs)?
初始化 curses 并調(diào)用另一個可調(diào)用對象 func,該對象應當為你的使用 curses 的應用程序的其余部分。 如果應用程序引發(fā)了異常,此函數(shù)將在重新引發(fā)異常并生成回溯信息之前將終端恢復到正常狀態(tài)。 隨后可調(diào)用對象 func 會被傳入主窗口 'stdscr' 作為其第一個參數(shù),再帶上其他所有傳給
wrapper()
的參數(shù)。 在調(diào)用 func 之前,wrapper()
會啟用 cbreak 模式,關(guān)閉回顯,啟用終端鍵盤,并在終端具有顏色支持的情況下初始化顏色。 在退出時(無論是正常退出還是異常退出)它會恢復 cooked 模式,打開回顯,并禁用終端鍵盤。
Window 對象?
Window 對象會由上面的 initscr()
和 newwin()
返回,它具有以下方法和屬性:
- window.addch(ch[, attr])?
- window.addch(y, x, ch[, attr])
將帶有屬性 attr 的字符 ch 繪制到
(y, x)
,覆蓋之前在該位置上繪制的任何字符。 默認情況下,字符的位置和屬性均為窗口對象的當前設(shè)置。備注
在窗口、子窗口或面板之外寫入會引發(fā)
curses.error
。 嘗試在窗口、子窗口或面板的右下角寫入將在字符被打印之后導致異常被引發(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
。 嘗試在窗口、子窗口或面板的右下角寫入將在字符串被打印之后導致異常被引發(fā)。此 Python 模塊的后端 ncurses 中的一個缺陷 會在調(diào)整窗口大小時導致段錯誤。 此缺陷已在 ncurses-6.1-20190511 中被修復。 如果你必須使用較早版本的 ncurses,則你只要在調(diào)用
addstr()
時不傳入嵌入了換行符的 str 即可避免觸發(fā)此錯誤。 請為每一行分別調(diào)用addstr()
。
- window.attroff(attr)?
從應用于寫入到當前窗口的 "background" 集中移除屬性 attr。
- window.attron(attr)?
向應用于寫入到當前窗口的 "background" 集中添加屬性 attr。
- window.attrset(attr)?
將 "background" 屬性集設(shè)為 attr。 該集合初始時為
0
(無屬性)。
- window.bkgd(ch[, attr])?
將窗口 background 特征屬性設(shè)為帶有屬性 attr 的字符 ch。 隨后此修改將應用于放置到該窗口中的每個字符。
窗口中每個字符的屬性會被修改為新的 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
都將導致該形參使用默認字符。 關(guān)鍵字形參 不可 被使用。 默認字符在下表中列出:參數(shù)
描述
默認值
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()
,但 ls 和 rs 均為 vertch 而 ts 和 bs 均為 horch。 此函數(shù)總是會使用默認的轉(zhuǎn)角字符。
- window.chgat(attr)?
- window.chgat(num, attr)
- window.chgat(y, x, attr)
- window.chgat(y, x, num, attr)
在當前光標位置或是在所提供的位置
(y, x)
設(shè)置 num 個字符的屬性。 如果 num 未給出或為-1
,則將屬性設(shè)置到所有字符上直至行尾。 如果提供了位置(y, x)
則此函數(shù)會將光標移至該位置。 修改過的行將使用touchline()
方法處理以便下次窗口刷新時內(nèi)容會重新顯示。
- window.clrtobot()?
從光標位置開始擦除直至窗口末端:光標以下的所有行都會被刪除,然后會執(zhí)行
clrtoeol()
的等效操作。
- window.clrtoeol()?
從光標位置開始擦除直至行尾。
- window.cursyncup()?
更新窗口所有上級窗口的當前光標位置以反映窗口的當前光標位置。
- window.delch([y, x])?
刪除位于
(y, x)
的任何字符。
- window.deleteln()?
刪除在光標之下的行。 所有后續(xù)的行都會上移一行。
- window.derwin(begin_y, begin_x)?
- window.derwin(nlines, ncols, begin_y, begin_x)
"derive window" 的縮寫,
derwin()
與調(diào)用subwin()
等效,不同之處在于 begin_y 和 begin_x 是想對于窗口的初始位置,而不是相對于整個屏幕。 返回代表所派生窗口的窗口對象。
- window.enclose(y, x)?
檢測給定的相對屏幕的字符-單元格坐標是否被給定的窗口所包圍,返回
True
或False
。 它適用于確定是哪個屏幕窗口子集包圍著某個鼠標事件的位置。在 3.10 版更改: 在之前版本中它會返回
1
或0
而不是True
或False
。
- 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 (seelocale.getencoding()
).3.3 新版功能.
- window.erase()?
清空窗口。
- window.getbegyx()?
返回左上角坐標的元組
(y, x)
。
- window.getbkgd()?
返回給定窗口的當前背景字符/屬性對。
- 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()?
將此窗口相對于父窗口的起始坐標作為元組
(y, x)
返回。 如果此窗口沒有父窗口則返回(-1, -1)
。
- window.getstr()?
- window.getstr(n)
- window.getstr(y, x)
- window.getstr(y, x, n)
從用戶讀取一個字節(jié)串對象,附帶基本的行編輯功能。
- window.getyx()?
返回當前光標相對于窗口左上角的位置的元組
(y, x)
。
- window.hline(ch, n)?
- window.hline(y, x, ch, n)
顯示一條起始于
(y, x)
長度為 n 個字符 ch 的水平線。
- window.idcok(flag)?
如果 flag 為
False
,curses 將不再考慮使用終端的硬件插入/刪除字符功能;如果 flag 為True
,則會啟用字符插入和刪除。 當 curses 首次初始化時,默認會啟用字符插入/刪除。
- window.immedok(flag)?
如果 flag 為
True
,窗口圖像中的任何改變都會自動導致窗口被刷新;你不必再自己調(diào)用refresh()
。 但是,這可能會由于重復調(diào)用 wrefresh 而顯著降低性能。 此選項默認被禁用。
- window.inch([y, x])?
返回窗口中給定位置上的字符。 下面的 8 個比特位是字符本身,上面的比特位則為屬性。
- window.insch(ch[, attr])?
- window.insch(y, x, ch[, attr])
將帶有屬性 attr 的字符 ch 繪制到
(y, x)
,將該行從位置 x 開始右移一個字符。
- window.insdelln(nlines)?
在指定窗口的當前行上方插入 nlines 行。 下面的 nlines 行將丟失。 對于 nlines 為負值的情況,則從光標下方的行開始刪除 nlines 行,并將其余的行向上移動。 下面的 nlines 行會被清空。 當前光標位置將保持不變。
- window.insertln()?
在光標下方插入一個空行。 所有后續(xù)的行都會下移一行。
- window.insnstr(str, n[, attr])?
- window.insnstr(y, x, str, n[, attr])
在光標下方的字符之前插入一個至多為 n 個字符的字符串(字符數(shù)量將與該行相匹配)。 如果 n 為零或負數(shù),則插入整個字符串。 光標右邊的所有字符將被右移,該行右端的字符將丟失。 光標位置將保持不變(在移到可能指定的 y, x 之后)。
- window.insstr(str[, attr])?
- window.insstr(y, x, str[, attr])
在光標下方的字符之前插入一個字符串(字符數(shù)量將與該行相匹配)。 光標右邊的所有字符將被右移,該行右端的字符將丟失。 光標位置將保持不變(在移到可能指定的 y, x 之后)。
- window.instr([n])?
- window.instr(y, x[, n])
返回從窗口的當前光標位置,或者指定的 y, x 開始提取的字符所對應的字節(jié)串對象。 屬性會從字符中去除。 如果指定了 n,
instr()
將返回長度至多為 n 個字符的字符串(不包括末尾的 NUL)。
- window.is_linetouched(line)?
如果指定的行自上次調(diào)用
refresh()
后發(fā)生了改變則返回True
;否則返回False
。 如果 line 對于給定的窗口不可用則會引發(fā)curses.error
異常。
- window.keypad(flag)?
如果 flag 為
True
,則某些鍵(小鍵盤鍵、功能鍵等)生成的轉(zhuǎn)義序列將由curses
來解析。 如果 flag 為False
,轉(zhuǎn)義序列將保持在輸入流中的原樣。
- window.leaveok(flag)?
如果 flag 為
True
,則在更新時光標將停留在原地,而不是在“光標位置”。 這將可以減少光標的移動。 在可能的情況下光標將變?yōu)椴豢梢姟?/p>如果 flag 為
False
,光標在更新后將總是位于“光標位置”。
- window.move(new_y, new_x)?
將光標移至
(new_y, new_x)
。
- window.mvderwin(y, x)?
讓窗口在其父窗口內(nèi)移動。 窗口相對于屏幕的參數(shù)不會被更改。 此例程用于在屏幕的相同物理位置顯示父窗口的不同部分。
- window.mvwin(new_y, new_x)?
移動窗口以使其左上角位于
(new_y, new_x)
。
- window.notimeout(flag)?
如果 flag 為
True
,則轉(zhuǎn)義序列將不會發(fā)生超時。如果 flag 為
False
,則在幾毫秒之后,轉(zhuǎn)義序列將不會被解析,并將保持在輸入流中的原樣。
- window.noutrefresh()?
標記為刷新但保持等待。 此函數(shù)會更新代表預期窗口狀態(tài)的數(shù)據(jù)結(jié)構(gòu),但并不強制更新物理屏幕。 要完成后者,請調(diào)用
doupdate()
。
- window.overlay(destwin[, sminrow, smincol, dminrow, dmincol, dmaxrow, dmaxcol])?
將窗口覆蓋在 destwin 上方。 窗口的大小不必相同,只有重疊的區(qū)域會被復制。 此復制是非破壞性的,這意味著當前背景字符不會覆蓋掉 destwin 的舊內(nèi)容。
為了獲得對被復制區(qū)域的細粒度控制,可以使用
overlay()
的第二種形式。 sminrow 和 smincol 是源窗口的左上角坐標,而其他變量則在目標窗口中標記出一個矩形。
- window.overwrite(destwin[, sminrow, smincol, dminrow, dmincol, dmaxrow, dmaxcol])?
將窗口覆蓋在 destwin 上方。 窗口的大小不必相同,此時只有重疊的區(qū)域會被復制。 此復制是破壞性的,這意味著當前背景字符會覆蓋掉 destwin 的舊內(nèi)容。
為了獲得對被復制區(qū)域的細粒度控制,可以使用
overwrite()
的第二種形式。 sminrow 和 smincol 是源窗口的左上角坐標,而其他變量則在目標窗口中標記出一個矩形。
- window.refresh([pminrow, pmincol, sminrow, smincol, smaxrow, smaxcol])?
立即更新顯示(將實際屏幕與之前的繪制/刪除方法進行同步)。
6 個可選參數(shù)僅在窗口為使用
newpad()
創(chuàng)建的面板時可被指定。 需要額外的形參來指定所涉及到的是面板和屏幕的哪一部分。 pminrow 和 pmincol 指定要在面板中顯示的矩形的左上角。 sminrow, smincol, smaxrow 和 smaxcol 指定要在屏幕中顯示的矩形的邊。 要在面板中顯示的矩形的右下角是根據(jù)屏幕坐標計算出來的,由于矩形的大小必須相同。 兩個矩形都必須完全包含在其各自的結(jié)構(gòu)之內(nèi)。 負的 pminrow, pmincol, sminrow 或 smincol 值會被視為將它們設(shè)為零值。
- window.resize(nlines, ncols)?
為 curses 窗口重新分配存儲空間以將其尺寸調(diào)整為指定的值。 如果任一維度的尺寸大于當前值,則窗口的數(shù)據(jù)將以具有合并了當前背景渲染(由
bkgdset()
設(shè)置)的空白來填充。
- window.scroll([lines=1])?
將屏幕或滾動區(qū)域向上滾動 lines 行。
- window.scrollok(flag)?
控制當一個窗口的光標移出窗口或滾動區(qū)域邊緣時會發(fā)生什么,這可能是在底端行執(zhí)行換行操作,或者在最后一行輸入最后一個字符導致的結(jié)果。 如果 flag 為
False
,光標會留在底端行。 如果 flag 為True
,窗口會向上滾動一行。 請注意為了在終端上獲得實際的滾動效果,還需要調(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。默認情況下,子窗口將從指定位置擴展到窗口的右下角。
- window.syncup()?
觸碰已在窗口中被改變的此窗口的各個上級窗口中的所有位置。
- window.timeout(delay)?
為窗口設(shè)置阻塞或非阻塞讀取行為。 如果 delay 為負值,則會使用阻塞讀?。ㄟ@將無限期地等待輸入)。 如果 delay 為零,則會使用非阻塞讀取,并且當沒有輸入在等待時
getch()
將返回-1
。 如果 delay 為正值,則getch()
將阻塞 delay 毫秒,并且當此延時結(jié)束時仍無輸入將返回-1
。
- window.touchline(start, count[, changed])?
假定從行 start 開始的 count 行已被更改。 如果提供了 changed,它將指明是將受影響的行標記為已更改 (changed
=True
) 還是未更改 (changed=False
)。
- window.touchwin()?
假定整個窗口已被更改,其目的是用于繪制優(yōu)化。
- window.vline(ch, n)?
- window.vline(y, x, ch, n)
顯示一條起始于
(y, x)
長度為 n 個字符 ch 的垂直線。
常量?
curses
模塊定義了以下數(shù)據(jù)成員:
- curses.version?
一個代表當前模塊版本的字節(jié)串對象。 也作
__version__
。
- curses.ncurses_version?
一個具名元組,它包含構(gòu)成 ncurses 庫版本號的三個數(shù)字: major, minor 和 patch。 三個值均為整數(shù)。 三個值也可通過名稱來訪問,因此
curses.ncurses_version[0]
等價于curses.ncurses_version.major
,依此類推。可用性:如果使用了 ncurses 庫。
3.8 新版功能.
有些常量可用于指定字符單元屬性。 實際可用的常量取決于具體的系統(tǒng)。
屬性 |
含意 |
---|---|
|
備用字符集模式 |
|
閃爍模式 |
|
粗體模式 |
|
暗淡模式 |
不可見或空白模式 |
|
|
斜體模式 |
|
正常屬性 |
|
保護模式 |
|
反轉(zhuǎn)背景色和前景色 |
|
突出模式 |
|
下劃線模式 |
|
水平突出顯示 |
|
左高亮 |
|
底部高亮 |
|
右高亮 |
|
頂部高亮 |
|
垂直突出顯示 |
|
用于提取字符的位掩碼 |
3.7 新版功能: A_ITALIC
was added.
有幾個常量可用于提取某些方法返回的相應屬性。
位掩碼 |
含意 |
---|---|
|
用于提取屬性的位掩碼 |
|
用于提取字符的位掩碼 |
|
用于提取顏色對字段信息的位掩碼 |
鍵由名稱以 KEY_
開頭的整數(shù)常量引用。確切的可用鍵取決于系統(tǒng)。
關(guān)鍵常數(shù) |
鍵 |
---|---|
|
最小鍵值 |
|
中斷鍵(不可靠) |
|
向下箭頭 |
|
向上箭頭 |
|
向左箭頭 |
|
向右箭頭 |
|
Home 鍵 (上+左箭頭) |
|
退格(不可靠) |
|
功能鍵。 支持至多 64 個功能鍵。 |
|
功能鍵 n 的值 |
|
刪除行 |
|
插入行 |
|
刪除字符 |
|
插入字符或進入插入模式 |
|
退出插入字符模式 |
|
清空屏幕 |
|
清空至屏幕底部 |
|
清空至行尾 |
|
向前滾動 1 行 |
|
向后滾動 1 行 (反轉(zhuǎn)) |
|
下一頁 |
|
上一頁 |
|
設(shè)置制表符 |
|
清除制表符 |
|
清除所有制表符 |
|
回車或發(fā)送 (不可靠) |
|
軟 (部分) 重置 (不可靠) |
|
重置或硬重置 (不可靠) |
|
打印 |
|
Home 向下或到底 (左下) |
|
鍵盤的左上角 |
|
鍵盤的右上角 |
|
鍵盤的中心 |
|
鍵盤左下方 |
|
鍵盤右下方 |
|
回退制表符 |
|
Beg (開始) |
|
取消 |
|
關(guān)閉 |
|
Cmd (命令行) |
|
復制 |
|
創(chuàng)建 |
|
End |
|
退出 |
|
查找 |
|
幫助 |
|
標記 |
|
消息 |
|
移動 |
|
下一個 |
|
打開 |
|
選項 |
|
Prev (上一個) |
|
重做 |
|
Ref (引用) |
|
刷新 |
|
替換 |
|
重啟 |
|
恢復 |
|
保存 |
|
Shift + Beg (開始) |
|
Shift + Cancel |
|
Shift + Command |
|
Shift + Copy |
|
Shift + Create |
|
Shift + 刪除字符 |
|
Shift + 刪除行 |
|
選擇 |
|
Shift + End |
|
Shift + 清空行 |
|
Shift + 退出 |
|
Shift + 查找 |
|
Shift + 幫助 |
|
Shift + Home |
|
Shift + 輸入 |
|
Shift + 向左箭頭 |
|
Shift + 消息 |
|
Shift + 移動 |
|
Shift + 下一個 |
|
Shift + 選項 |
|
Shift + 上一個 |
|
Shift + 打印 |
|
Shift + 重做 |
|
Shift + 替換 |
|
Shift + 向右箭頭 |
|
Shift + 恢復 |
|
Shift + 保存 |
|
Shift + 掛起 |
|
Shift + 撤銷 |
|
掛起 |
|
撤銷操作 |
|
鼠標事件已發(fā)生 |
|
終端大小改變事件 |
|
最大鍵值 |
在VT100及其軟件仿真(例如X終端仿真器)上,通常至少有四個功能鍵( KEY_F1
, KEY_F2
, KEY_F3
, KEY_F4
)可用,并且箭頭鍵以明顯的方式映射到 KEY_UP
, KEY_DOWN
, KEY_LEFT
和 KEY_RIGHT
。如果您的機器有一個PC鍵盤,可以安全地使用箭頭鍵和十二個功能鍵(舊的PC鍵盤可能只有十個功能鍵);此外,以下鍵盤映射是標準的:
鍵帽 |
常量 |
---|---|
Insert |
KEY_IC |
Delete |
KEY_DC |
Home |
KEY_HOME |
End |
KEY_END |
Page Up |
KEY_PPAGE |
Page Down |
KEY_NPAGE |
下表列出了替代字符集中的字符。 這些字符繼承自 VT100 終端,在 X 終端等軟件模擬器上通常均為可用。 當沒有可用的圖形時,curses 會回退為粗糙的可打印 ASCII 近似符號。
備注
只有在調(diào)用 initscr()
之后才能使用它們
ACS代碼 |
含意 |
---|---|
|
右上角的別名 |
|
實心方塊 |
|
正方形 |
|
水平線的別名 |
|
左上角的別名 |
|
頂部 T 型的別名 |
|
底部 T 型 |
|
正方形 |
|
棋盤(點刻) |
|
向下箭頭 |
|
等級符 |
|
菱形 |
|
大于或等于 |
|
水平線 |
|
燈形符號 |
|
向左箭頭 |
|
小于或等于 |
|
左下角 |
|
右下角 |
|
左側(cè) T 型 |
|
不等號 |
|
字母π |
|
正負號 |
|
加號 |
|
向右箭頭 |
|
右側(cè) T 型 |
|
掃描線 1 |
|
掃描線3 |
|
掃描線7 |
|
掃描線 9 |
|
右下角的別名 |
|
垂直線的別名 |
|
右側(cè) T 型的別名 |
|
左下角的別名 |
|
底部 T 型的別名 |
|
左側(cè) T 型的別名 |
|
交叉或大加號的替代名稱 |
|
英鎊 |
|
頂部 T 型 |
|
向上箭頭 |
|
左上角 |
|
右上角 |
|
垂線 |
下表列出了預定義的顏色:
常量 |
顏色 |
---|---|
|
黑色 |
|
藍色 |
|
青色(淺綠藍色) |
|
綠色 |
|
洋紅色(紫紅色) |
|
紅色 |
|
白色 |
|
黃色 |
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ù)均為相對于該窗口的坐標值。 第二和第三個參數(shù)為要繪制的矩形的左上角的 y 和 x 坐標值;第四和第五個參數(shù)為其右下角的 y 和 x 坐標值。 將會使用 VT100/IBM PC 形式的字符在可用的終端上(包括 xterm 和大多數(shù)其他軟件終端模擬器)繪制矩形。 在其他情況下則將使用 ASCII 橫杠、豎線和加號繪制。
文本框?qū)ο?a title="永久鏈接至標題" class="headerlink" href="#textbox-objects">?
你可以通過如下方式實例化一個 Textbox
:
- class curses.textpad.Textbox(win)?
返回一個文本框控件對象。 win 參數(shù)必須是一個 curses 窗口 對象,文本框?qū)⒈话谄渲小?文本框的編輯光標在初始時位于包含窗口的左上角,坐標值為
(0, 0)
。 實例的stripspaces
旗標初始時為啟用。Textbox
對象具有以下方法:- edit([validator])?
這是你通常將使用的入口點。 它接受編輯按鍵直到鍵入了一個終止按鍵。 如果提供了 validator,它必須是一個函數(shù)。 它將在每次按鍵時被調(diào)用并傳入相應的按鍵作作為形參;命令發(fā)送將在結(jié)果上執(zhí)行。 此方法會以字符串形式返回窗口內(nèi)容;是否包括窗口中的空白將受到
stripspaces
屬性的影響。
- do_command(ch)?
處理單個按鍵命令。以下是支持的特殊按鍵:
按鍵
動作
Control-A
轉(zhuǎn)到窗口的左邊緣。
Control-B
光標向左,如果可能,包含前一行。
Control-D
刪除光標下的字符。
Control-E
前往右邊緣(stripspaces 關(guān)閉時)或者行尾(stripspaces 啟用時)。
Control-F
向右移動光標,適當時換行到下一行。
Control-G
終止,返回窗口內(nèi)容。
Control-H
向后刪除字符。
Control-J
如果窗口是1行則終止,否則插入換行符。
Control-K
如果行為空,則刪除它,否則清除到行尾。
Control-L
刷新屏幕。
Control-N
光標向下;向下移動一行。
Control-O
在光標位置插入一個空行。
Control-P
光標向上;向上移動一行。
如果光標位于無法移動的邊緣,則移動操作不執(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?
此屬性是控制窗口中空白解讀方式的旗標。 當啟用時,每一行的末尾空白會被忽略;任何將光標定位至末尾空白的光標動作都將改為前往該行末尾,并且在收集窗口內(nèi)容時將去除末尾空白。