curses --- 終端字符單元顯示的處理?
curses 模塊提供了 curses 庫的接口,這是可移植高級終端處理的事實標準。
雖然 curses 在 Unix 環境中使用最為廣泛,但也有適用于 Windows,DOS 以及其他可能的系統的版本。此擴展模塊旨在匹配 ncurses 的 API,這是一個部署在 Linux 和 Unix 的 BSD 變體上的開源 curses 庫。
注解
每當文檔提到 字符 時,它可以被指定為一個整數,一個單字符 Unicode 字符串或者一個單字節的字節字符串。
每當此文檔提到 字符串 時,它可以被指定為一個 Unicode 字符串或者一個字節字符串。
注解
從 5.4 版本開始,ncurses 庫使用 nl_langinfo 函數來決定如何解釋非 ASCII 數據。這意味著你需要在程序中調用 locale.setlocale() 函數,并使用一種系統中可用的編碼方法來編碼 Unicode 字符串。這個例子使用了系統默認的編碼:
import locale
locale.setlocale(locale.LC_ALL, '')
code = locale.getpreferredencoding()
然后使用 code 作為 str.encode() 調用的編碼。
參見
- 模塊
curses.ascii 在 ASCII 字符上工作的工具,無論你的區域設置是什么。
- 模塊
curses.panel 為 curses 窗口添加深度的面板棧擴展。
- 模塊
curses.textpad 用于使 curses 支持 Emacs 式綁定的可編輯文本部件。
- 用 Python 進行 Curses 編程
關于配合 Python 使用 curses 的教學材料,由 Andrew Kuchling 和 Eric Raymond 撰寫。
Python 源碼發布包的 Tools/demo/ 目錄包含了一些使用此模塊所提供的 curses 綁定的示例程序。
函數?
curses 模塊定義了以下異常:
-
exception
curses.error? 當 curses 庫中函數返回一個錯誤時引發的異常。
注解
只要一個函數或方法的 x 或 y 參數是可選項,它們會默認為當前光標位置。 而當 attr 是可選項時,它會默認為 A_NORMAL。
curses 模塊定義了以下函數:
-
curses.baudrate()? 以每秒比特數為單位返回終端輸出速度。 在軟件終端模擬器上它將具有一個固定的最高值。 此函數出于歷史原因被包括;在以前,它被用于寫輸出循環以提供時間延遲,并偶爾根據線路速度來改變接口。
-
curses.beep()? 發出短促的提醒聲音。
-
curses.can_change_color()? 根據程序員能否改變終端顯示的顏色返回
True或False。
-
curses.cbreak()? 進入 cbreak 模式。 在 cbreak 模式(有時也稱為“稀有”模式)通常的 tty 行緩沖會被關閉并且字符可以被一個一個地讀取。 但是,與原始模式不同,特殊字符(中斷、退出、掛起和流程控制)會在 tty 驅動和調用程序上保留其效果。 首先調用
raw()然后調用cbreak()會將終端置于 cbreak 模式。
-
curses.color_content(color_number)? 返回顏色值 color_number 中紅、綠和藍(RGB)分量的強度,此強度值必須介于
0和COLORS之間。 返回一個 3 元組,其中包含給定顏色的 R,G,B 值,它們必須介于0(無分量) 和1000(最大分量) 之間。
-
curses.color_pair(color_number)? 返回用于顯示指定顏色的文本的屬性值。 該屬性值可與
A_STANDOUT,A_REVERSE以及其他A_*屬性組合使用。pair_number()是此函數的對應操作。
-
curses.curs_set(visibility)? 設置光標狀態。 visibility 可設為
0,1或2表示不可見、正常與高度可見。 如果終端支持所請求的可見性,則返回之前的光標狀態;否則會引發異常。 在許多終端上,“正常可見”模式為下劃線光標而“高度可見”模式為方塊形光標。
-
curses.def_prog_mode()? 將當前終端模式保存為 "program" 模式,即正在運行的程序使用 curses 時的模式。 (與其相對的是 "shell" 模式,即程序不使用 curses。) 對
reset_prog_mode()的后續調用將恢復此模式。
-
curses.def_shell_mode()? 將當前終端模式保存為 "shell" 模式,即正在運行的程序不使用 curses 的模式。 (與其相對的是 "program" 模式,即程序使用 功能。) 對
reset_shell_mode()的后續調用將恢復此模式。
-
curses.delay_output(ms)? 在輸出中插入 ms 毫秒的暫停。
-
curses.doupdate()? 更新物理屏幕。 curses 庫會保留兩個數據結構,一個代表當前物理屏幕的內容以及一個虛擬屏幕代表需要的后續狀態。
doupdate()整體更新物理屏幕以匹配虛擬屏幕。虛擬屏幕可以通過在寫入操作例如在一個窗口上執行
addstr()之后調用noutrefresh()來刷新。 普通的refresh()調用只是簡單的noutrefresh()加doupdate();如果你需要更新多個窗口,你可以通過在所有窗口上發出noutrefresh()調用再加單次doupdate()來提升性能并可減少屏幕閃爍。
-
curses.echo()? 進入 echo 模式。 在 echo 模式下,輸入的每個字符都會在輸入后回顯到屏幕上。
-
curses.endwin()? 撤銷庫的初始化,使終端返回正常狀態。
-
curses.erasechar()? 將用戶的當前擦除字符以單字節字節串對象的形式返回。 在 Unix 操作系統下這是 curses 程序用來控制 tty 的屬性,而不是由 curses 庫本身來設置的。
-
curses.filter()? 如果要使用
filter()例程,它必須在調用initscr()之前被調用。 其效果是在這些調用期間,LINES會被設為1;clear,cup,cud,cud1,cuu1,cuu,vpa等功能會被禁用;而home字符串會被設為cr的值。 其影響是光標會被限制在當前行內,屏幕刷新也是如此。 這可被用于啟用單字符模式的行編輯而不觸及屏幕的其余部分。
-
curses.flushinp()? 刷新所有輸入緩沖區。 這會丟棄任何已被用戶輸入但尚未被程序處理的預輸入內容。
-
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.getwin(file)? 讀取由之前的
putwin()調用存放在文件中的窗口相關數據。 該例程隨后將使用該數據創建并初始化一個新窗口,并返回該新窗口對象。
-
curses.has_colors()? 如果終端能顯示彩色則返回
True;否則返回False。
-
curses.has_ic()? 如果終端具有插入和刪除字符的功能則返回
True。 此函數僅是出于歷史原因而被包括的,因為所有現代軟件終端模擬器都具有這些功能。
-
curses.has_il()? 如果終端具有插入和刪除字符功能,或者能夠使用滾動區域來模擬這些功能則返回
True。 此函數僅是出于歷史原因而被包括的,因為所有現代軟件終端模擬器都具有這些功能。
-
curses.has_key(ch)? 接受一個鍵值 ch,并在當前終端類型能識別出具有該值的鍵時返回
True。
-
curses.halfdelay(tenths)? 用于半延遲模式,與 cbreak 模式的類似之處是用戶所鍵入的字符會立即對程序可用。 但是,在阻塞 tenths 個十分之一秒之后,如果還未輸入任何內容則將引發異常。 tenths 值必須為
1和255之間的數字。 使用nocbreak()可退出半延遲模式。
-
curses.init_color(color_number, r, g, b)? 更改某個顏色的定義,接受要更改的顏色編號以及三個 RGB 值(表示紅綠藍三分量的強度)。 color_number 值必須為
0和COLORS之間的數字。 r, g, b 值分別必須為0和1000之間的數字。 當使用init_color()時,出現在屏幕上的對應顏色會立即按照新定義來更改。 此函數在大多數終端上都是無操作的;它僅會在can_change_color()返回True時生效。
-
curses.init_pair(pair_number, fg, bg)? 更改某個顏色對的定義。 它接受三個參數:要更改的顏色對編號,前景色編號和背景色編號。 pair_number 值必須為
1和COLOR_PAIRS - 1之間的數字(并且0號顏色對固定為黑底白字而無法更改)。 fg 和 bg 參數值必須為0和COLORS之間的數字。 如果顏色對之前已被初始化,則屏幕會被刷新使得出現在屏幕上的該顏色對會立即按照新定義來更改。
-
curses.is_term_resized(nlines, ncols)? 如果
resize_term()會修改窗口結構則返回True,否則返回False。
-
curses.keyname(k)? 將編號為 k 的鍵名稱作為字節串對象返回。 生成可打印 ASCII 字符的鍵名稱就是鍵所對應的字符。 Ctrl-鍵組合的鍵名稱則是一個兩字節的字節串對象,它由插入符 (
b'^') 加對應的可打印 ASCII 字符組成。 Alt-鍵組合 (128--255) 的鍵名稱則是由前綴b'M-'加對應的可打印 ASCII 字符組成的字節串對象。
-
curses.killchar()? 將用戶的當前行刪除字符以單字節字節串對象的形式返回。 在 Unix 操作系統下這是 curses 程序用來控制 tty 的屬性,而不是由 curses 庫本身來設置的。
-
curses.longname()? 返回一個字節串對象,其中包含描述當前終端的 terminfo 長名稱字段。 詳細描述的最大長度為 128 個字符。 它僅在調用
initscr()之后才會被定義。
-
curses.meta(flag)? 如果 flag 為
True,則允許輸入 8 比特位的字符。 如果 flag 為False,則只允許 7 比特位的字符。
-
curses.mouseinterval(interval)? 以毫秒為單位設置能夠被識別為點擊的按下和釋放事件之間可以間隔的最長時間,并返回之前的間隔值。 默認值為 200 毫秒,即五分之一秒。
-
curses.mousemask(mousemask)? 設置要報告的鼠標事件,并返回一個元組
(availmask, oldmask)。 availmask 表明指定的鼠標事件中哪些可以被報告;當完全失敗時將返回0。 oldmask 是給定窗口的鼠標事件之前的掩碼值。 如果從未調用此函數,則不會報告任何鼠標事件。
-
curses.napms(ms)? 休眠 ms 毫秒。
-
curses.newpad(nlines, ncols)? 創建并返回一個指向具有給定行數和列數新的填充數據結構的指針。 將填充作為窗口對象返回。
面板類似于窗口,區別在于它不受屏幕大小的限制,并且不必與屏幕的特定部分相關聯。 面板可以在需要使用大窗口時使用,并且每次只需將窗口的一部分放在屏幕上。 面板不會發生自動刷新(例如由于滾動或輸入回顯)。 面板的
refresh()和noutrefresh()方法需要 6 個參數來指定面板要顯示的部分以及要用于顯示的屏幕位置。 這些參數是 pminrow, pmincol, sminrow, smincol, smaxrow, smaxcol;p 參數表示要顯示的面板區域的左上角而 s 參數定義了要顯示的面板區域在屏幕上的剪切框。
-
curses.newwin(nlines, ncols)? -
curses.newwin(nlines, ncols, begin_y, begin_x) 返回一個新的 窗口,其左上角位于
(begin_y, begin_x),并且其高度/寬度為 nlines/ncols。默認情況下,窗口將從指定位置擴展到屏幕的右下角。
-
curses.nl()? 進入換行模式。 此模式會在輸入時將回車轉換為換行符,并在輸出時將換行符轉換為回車加換行。 換行模式會在初始時啟用。
-
curses.nocbreak()? 退出 cbreak 模式。 返回具有行緩沖的正常 "cooked" 模式。
-
curses.noecho()? 退出 echo 模式。 關閉輸入字符的回顯。
-
curses.nonl()? 退出 newline 模式。 停止在輸入時將回車轉換為換行,并停止在輸出時從換行到換行/回車的底層轉換(但這不會改變
addch('\n')的行為,此行為總是在虛擬屏幕上執行相當于回車加換行的操作)。 當停止轉換時,curses 有時能使縱向移動加快一些;并且,它將能夠在輸入時檢測回車鍵。
-
curses.noqiflush()? 當使用
noqiflush()例程時,與INTR,QUIT和SUSP字符相關聯的輸入和輸出隊列的正常刷新將不會被執行。 如果你希望在處理程序退出后還能繼續輸出,就像沒有發生過中斷一樣,你可能會想要在信號處理程序中調用noqiflush()。
-
curses.noraw()? 退出 raw 模式。 返回具有行緩沖的正常 "cooked" 模式。
-
curses.pair_content(pair_number)? 返回包含對應于所請求顏色對的顏色的元組
(fg, bg)。 pair_number 的值必須在1和COLOR_PAIRS - 1之間。
-
curses.pair_number(attr)? 返回通過屬性值 attr 所設置的顏色對的編號。
color_pair()是此函數的對應操作。
-
curses.qiflush([flag])? 如果 flag 為
False,則效果與調用noqiflush()相同。 如果 flag 為True或未提供參數,則在讀取這些控制字符時隊列將被刷新。
-
curses.raw()? 進入 raw 模式。 在 raw 模式下,正常的行緩沖和對中斷、退出、掛起和流程控制鍵的處理會被關閉;字符會被逐個地提交給 curses 輸入函數。
-
curses.reset_prog_mode()? 將終端恢復到 "program" 模式,如之前由
def_prog_mode()所保存的一樣。
-
curses.reset_shell_mode()? 將終端恢復到 "shell" 模式,如之前由
def_shell_mode()所保存的一樣。
-
curses.resize_term(nlines, ncols)? 由
resizeterm()用來執行大部分工作的后端函數;當調整窗口大小時,resize_term()會以空白填充擴展區域。 調用方應用程序應當以適當的數據填充這些區域。resize_term()函數會嘗試調整所有窗口的大小。 但是,由于面板的調用約定,在不與應用程序進行額外交互的情況下是無法調整其大小的。
-
curses.resizeterm(nlines, ncols)? 將標準窗口和當前窗口的大小調整為指定的尺寸,并調整由 curses 庫所使用的記錄窗口尺寸的其他記錄數據(特別是 SIGWINCH 處理程序)。
-
curses.setupterm(term=None, fd=-1)? 初始化終端。 term 為給出終端名稱的字符串或為
None;如果省略或為None,則將使用TERM環境變量的值。 fd 是任何初始化序列將被發送到的文件描述符;如未指定或為-1,則將使用sys.stdout的文件描述符。
-
curses.start_color()? 如果程序員想要使用顏色,則必須在任何其他顏色操作例程被調用之前調用它。 在
initscr()之后立即調用此例程是一個很好的做法。start_color()會初始化八種基本顏色(黑、紅、綠、黃、藍、品、青和白)以及curses模塊中的兩個全局變量COLORS和COLOR_PAIRS,其中包含終端可支持的顏色和顏色對的最大數量。 它還會將終端中的顏色恢復為終端剛啟動時的值。
-
curses.termattrs()? 返回終端所支持的所有視頻屬性邏輯 OR 的值。 此信息適用于當 curses 程序需要對屏幕外觀進行完全控制的情況。
-
curses.termname()? 將環境變量
TERM的值截短至 14 個字節,作為字節串對象返回。
-
curses.tigetflag(capname)? 將與 terminfo 功能名稱 capname 相對應的布爾功能值以整數形式返回。 如果 capname 不是一個布爾功能則返回
-1,如果其被取消或不存在于終端描述中則返回0。
-
curses.tigetnum(capname)? 將與 terminfo 功能名稱 capname 相對應的數字功能值以整數形式返回。 如果 capname 不是一個數字功能則返回
-2,如果其被取消或不存在于終端描述中則返回-1。
-
curses.tigetstr(capname)? 將與 terminfo 功能名稱 capname 相對應的字符串功能值以字節串對象形式返回。 如果 capname 不是一個 terminfo "字符串功能" 或者如果其被取消或不存在于終端描述中則返回
None。
-
curses.tparm(str[, ...])? 使用提供的形參初始化字節串對象 str,其中 str 應當是從 terminfo 數據庫獲取的參數化字符串。 例如
tparm(tigetstr("cup"), 5, 3)的結果可能為b'\033[6;4H',實際結果將取決于終端類型。
-
curses.typeahead(fd)? 指定將被用于預輸入檢查的文件描述符 fd。 如果 fd 為
-1,則不執行預輸入檢查。curses 庫會在更新屏幕時通過定期查找預輸入來執行 "斷行優化"。 如果找到了輸入,并且輸入是來自于 tty,則會將當前更新推遲至 refresh 或 doupdate 再次被調用的時候,以便允許更快地響應預先輸入的命令。 此函數允許為預輸入檢查指定其他的文件描述符。
-
curses.unctrl(ch)? 返回一個字節串對象作為字符 ch 的可打印表示形式。 控制字符會表示為一個變換符加相應的字符,例如
b'^C'。 可打印字符則會保持原樣。
-
curses.update_lines_cols()? 更新
LINES和COLS。 適用于檢測屏幕大小的手動調整。3.5 新版功能.
-
curses.ungetmouse(id, x, y, z, bstate)? 將
KEY_MOUSE事件推送到輸入隊列,將其與給定的狀態數據進行關聯。
-
curses.use_env(flag)? 如果使用此函數,則應當在調用
initscr()或 newterm 之前調用它。 當 flag 為False時,將會使用在 terminfo 數據庫中指定的行和列的值,即使設置了環境變量LINES和COLUMNS(默認使用),或者如果 curses 是在窗口中運行(在此情況下如果未設置LINES和COLUMNS則默認行為將是使用窗口大小)。
-
curses.use_default_colors()? 允許在支持此特性的終端上使用默認的顏色值。 使用此函數可在你的應用程序中支持透明效果。 默認顏色會被賦給顏色編號
-1。 舉例來說,在調用此函數后,init_pair(x, curses.COLOR_RED, -1)會將顏色對 x 初始化為紅色前景和默認顏色背景。
-
curses.wrapper(func, ...)? 初始化 curses 并調用另一個可調用對象 func,該對象應當為你的使用 curses 的應用程序的其余部分。 如果應用程序引發了異常,此函數將在重新引發異常并生成回溯信息之前將終端恢復到正常狀態。 隨后可調用對象 func 會被傳入主窗口 'stdscr' 作為其第一個參數,再帶上其他所有傳給
wrapper()的參數。 在調用 func 之前,wrapper()會啟用 cbreak 模式,關閉回顯,啟用終端鍵盤,并在終端具有顏色支持的情況下初始化顏色。 在退出時(無論是正常退出還是異常退出)它會恢復 cooked 模式,打開回顯,并禁用終端鍵盤。
Window 對象?
Window 對象會由上面的 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.注解
在窗口、子窗口或面板之外寫入會引發
curses.error。 嘗試在窗口、子窗口或面板的右下角寫入將在字符被打印之后導致異常被引發。
-
window.addnstr(str, n[, attr])? -
window.addnstr(y, x, str, n[, attr]) 將帶有屬性 attr 的字符串 str 中的至多 n 個字符繪制到
(y, x),覆蓋之前在屏幕上的任何內容。
-
window.addstr(str[, attr])? -
window.addstr(y, x, str[, attr]) 將帶有屬性 attr 的字符串 str 繪制到
(y, x),覆蓋之前在屏幕上的任何內容。注解
在窗口、子窗口或面板之外寫入會引發
curses.error。 嘗試在窗口、子窗口或面板的右下角寫入將在字符串被打印之后導致異常被引發。
-
window.attroff(attr)? 從應用于寫入到當前窗口的 "background" 集中移除屬性 attr。
-
window.attron(attr)? 向應用于寫入到當前窗口的 "background" 集中添加屬性 attr。
-
window.attrset(attr)? 將 "background" 屬性集設為 attr。 該集合初始時為
0(無屬性)。
-
window.bkgd(ch[, attr])? 將窗口 background 特征屬性設為帶有屬性 attr 的字符 ch。 隨后此修改將應用于放置到該窗口中的每個字符。
窗口中每個字符的屬性會被修改為新的 background 屬性。
不論之前的 background 字符出現在哪里,它都會被修改為新的 background 字符。
-
window.bkgdset(ch[, attr])? 設置窗口的背景。 窗口的背景由字符和屬性的任意組合構成。 背景的屬性部分會與寫入窗口的所有非空白字符合并(即 OR 運算)。 背景和字符和屬性部分均會與空白字符合并。 背景將成為字符的特征屬性并在任何滾動與插入/刪除行/字符操作中與字符一起移動。
-
window.border([ls[, rs[, ts[, bs[, tl[, tr[, bl[, br]]]]]]]])? 在窗口邊緣繪制邊框。每個參數指定用于邊界特定部分的字符;請參閱下表了解更多詳情。
注解
任何形參的值為
0都將導致該形參使用默認字符。 關鍵字形參 不可 被使用。 默認字符在下表中列出:參數
描述
默認值
ls
左側
ACS_VLINErs
右側
ACS_VLINEts
頂部
ACS_HLINEbs
底部
ACS_HLINEtl
左上角
ACS_ULCORNERtr
右上角
ACS_URCORNERbl
左下角
ACS_LLCORNERbr
右下角
ACS_LRCORNER
-
window.chgat(attr)? -
window.chgat(num, attr) -
window.chgat(y, x, attr) -
window.chgat(y, x, num, attr) 在當前光標位置或是在所提供的位置
(y, x)設置 num 個字符的屬性。 如果 num 未給出或為-1,則將屬性設置到所有字符上直至行尾。 如果提供了位置(y, x)則此函數會將光標移至該位置。 修改過的行將使用touchline()方法處理以便下次窗口刷新時內容會重新顯示。
-
window.clrtobot()? 從光標位置開始擦除直至窗口末端:光標以下的所有行都會被刪除,然后會執行
clrtoeol()的等效操作。
-
window.clrtoeol()? 從光標位置開始擦除直至行尾。
-
window.cursyncup()? 更新窗口所有上級窗口的當前光標位置以反映窗口的當前光標位置。
-
window.delch([y, x])? 刪除位于
(y, x)的任何字符。
-
window.deleteln()? 刪除在光標之下的行。 所有后續的行都會上移一行。
-
window.derwin(begin_y, begin_x)? -
window.derwin(nlines, ncols, begin_y, begin_x) "derive window" 的縮寫,
derwin()與調用subwin()等效,不同之處在于 begin_y 和 begin_x 是想對于窗口的初始位置,而不是相對于整個屏幕。 返回代表所派生窗口的窗口對象。
-
window.enclose(y, x)? 檢測給定的相對屏幕的字符-單元格坐標是否被給定的窗口所包圍,返回
True或False。 它適用于確定是哪個屏幕窗口子集包圍著某個鼠標事件的位置。
-
window.encoding? 用于編碼方法參數(Unicode 字符串和字符)的編碼格式。 encoding 屬性是在創建子窗口時從父窗口繼承的,例如通過
window.subwin()。 默認情況下,會使用當前區域的編碼格式 (參見locale.getpreferredencoding())。3.3 新版功能.
-
window.erase()? 清空窗口。
-
window.getbegyx()? 返回左上角坐標的元組
(y, x)。
-
window.getbkgd()? 返回給定窗口的當前背景字符/屬性對。
-
window.getch([y, x])? 獲取一個字符。 請注意所返回的整數 不一定 要在 ASCII 范圍以內:功能鍵、小鍵盤鍵等等是由大于 255 的數字表示的。 在無延遲模式下,如果沒有輸入則返回
-1,在其他情況下都會等待直至有鍵被按下。
-
window.get_wch([y, x])? 獲取一個寬字符。 對于大多數鍵都是返回一個字符,對于功能鍵、小鍵盤鍵和其他特殊鍵則是返回一個整數。 在無延遲模式下,如果沒有輸入則返回一個異常。
3.3 新版功能.
-
window.getkey([y, x])? 獲取一個字符,返回一個字符串而不是像
getch()那樣返回一個整數。 功能鍵、小鍵盤鍵和其他特殊鍵則是返回一個包含鍵名的多字節字符串。 在無延遲模式下,如果沒有輸入則引發一個異常。
-
window.getmaxyx()? 返回窗口高度和寬度的元組
(y, x)。
-
window.getparyx()? 將此窗口相對于父窗口的起始坐標作為元組
(y, x)返回。 如果此窗口沒有父窗口則返回(-1, -1)。
-
window.getstr()? -
window.getstr(n) -
window.getstr(y, x) -
window.getstr(y, x, n) 從用戶讀取一個字節串對象,附帶基本的行編輯功能。
-
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,窗口圖像中的任何改變都會自動導致窗口被刷新;你不必再自己調用refresh()。 但是,這可能會由于重復調用 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()? 在光標下方插入一個空行。 所有后續的行都會下移一行。
-
window.insnstr(str, n[, attr])? -
window.insnstr(y, x, str, n[, attr]) 在光標下方的字符之前插入一個至多為 n 個字符的字符串(字符數量將與該行相匹配)。 如果 n 為零或負數,則插入整個字符串。 光標右邊的所有字符將被右移,該行右端的字符將丟失。 光標位置將保持不變(在移到可能指定的 y, x 之后)。
-
window.insstr(str[, attr])? -
window.insstr(y, x, str[, attr]) 在光標下方的字符之前插入一個字符串(字符數量將與該行相匹配)。 光標右邊的所有字符將被右移,該行右端的字符將丟失。 光標位置將保持不變(在移到可能指定的 y, x 之后)。
-
window.instr([n])? -
window.instr(y, x[, n]) 返回從窗口的當前光標位置,或者指定的 y, x 開始提取的字符所對應的字節串對象。 屬性會從字符中去除。 如果指定了 n,
instr()將返回長度至多為 n 個字符的字符串(不包括末尾的 NUL)。
-
window.is_linetouched(line)? 如果指定的行自上次調用
refresh()后發生了改變則返回True;否則返回False。 如果 line 對于給定的窗口不可用則會引發curses.error異常。
-
window.keypad(flag)? 如果 flag 為
True,則某些鍵(小鍵盤鍵、功能鍵等)生成的轉義序列將由curses來解析。 如果 flag 為False,轉義序列將保持在輸入流中的原樣。
-
window.leaveok(flag)? 如果 flag 為
True,則在更新時光標將停留在原地,而不是在“光標位置”。 這將可以減少光標的移動。 在可能的情況下光標將變為不可見。如果 flag 為
False,光標在更新后將總是位于“光標位置”。
-
window.move(new_y, new_x)? 將光標移至
(new_y, new_x)。
-
window.mvderwin(y, x)? 讓窗口在其父窗口內移動。 窗口相對于屏幕的參數不會被更改。 此例程用于在屏幕的相同物理位置顯示父窗口的不同部分。
-
window.mvwin(new_y, new_x)? 移動窗口以使其左上角位于
(new_y, new_x)。
-
window.notimeout(flag)? 如果 flag 為
True,則轉義序列將不會發生超時。如果 flag 為
False,則在幾毫秒之后,轉義序列將不會被解析,并將保持在輸入流中的原樣。
-
window.noutrefresh()? 標記為刷新但保持等待。 此函數會更新代表預期窗口狀態的數據結構,但并不強制更新物理屏幕。 要完成后者,請調用
doupdate()。
-
window.overlay(destwin[, sminrow, smincol, dminrow, dmincol, dmaxrow, dmaxcol])? 將窗口覆蓋在 destwin 上方。 窗口的大小不必相同,只有重疊的區域會被復制。 此復制是非破壞性的,這意味著當前背景字符不會覆蓋掉 destwin 的舊內容。
為了獲得對被復制區域的細粒度控制,可以使用
overlay()的第二種形式。 sminrow 和 smincol 是源窗口的左上角坐標,而其他變量則在目標窗口中標記出一個矩形。
-
window.overwrite(destwin[, sminrow, smincol, dminrow, dmincol, dmaxrow, dmaxcol])? 將窗口覆蓋在 destwin 上方。 窗口的大小不必相同,此時只有重疊的區域會被復制。 此復制是破壞性的,這意味著當前背景字符會覆蓋掉 destwin 的舊內容。
為了獲得對被復制區域的細粒度控制,可以使用
overwrite()的第二種形式。 sminrow 和 smincol 是源窗口的左上角坐標,而其他變量則在目標窗口中標記出一個矩形。
-
window.refresh([pminrow, pmincol, sminrow, smincol, smaxrow, smaxcol])? 立即更新顯示(將實際屏幕與之前的繪制/刪除方法進行同步)。
6 個可選參數僅在窗口為使用
newpad()創建的面板時可被指定。 需要額外的形參來指定所涉及到的是面板和屏幕的哪一部分。 pminrow 和 pmincol 指定要在面板中顯示的矩形的左上角。 sminrow, smincol, smaxrow 和 smaxcol 指定要在屏幕中顯示的矩形的邊。 要在面板中顯示的矩形的右下角是根據屏幕坐標計算出來的,由于矩形的大小必須相同。 兩個矩形都必須完全包含在其各自的結構之內。 負的 pminrow, pmincol, sminrow 或 smincol 值會被視為將它們設為零值。
-
window.resize(nlines, ncols)? 為 curses 窗口重新分配存儲空間以將其尺寸調整為指定的值。 如果任一維度的尺寸大于當前值,則窗口的數據將以具有合并了當前背景渲染(由
bkgdset()設置)的空白來填充。
-
window.scroll([lines=1])? 將屏幕或滾動區域向上滾動 lines 行。
-
window.scrollok(flag)? 控制當一個窗口的光標移出窗口或滾動區域邊緣時會發生什么,這可能是在底端行執行換行操作,或者在最后一行輸入最后一個字符導致的結果。 如果 flag 為
False,光標會留在底端行。 如果 flag 為True,窗口會向上滾動一行。 請注意為了在終端上獲得實際的滾動效果,還需要調用idlok()。
-
window.setscrreg(top, bottom)? 設置從 top 行至 bottom 行的滾動區域。 所有滾動操作將在此區域中進行。
-
window.standend()? 關閉 standout 屬性。 在某些終端上此操作會有關閉所有屬性的副作用。
-
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)? 為窗口設置阻塞或非阻塞讀取行為。 如果 delay 為負值,則會使用阻塞讀取(這將無限期地等待輸入)。 如果 delay 為零,則會使用非阻塞讀取,并且當沒有輸入在等待時
getch()將返回-1。 如果 delay 為正值,則getch()將阻塞 delay 毫秒,并且當此延時結束時仍無輸入將返回-1。
-
window.touchline(start, count[, changed])? 假定從行 start 開始的 count 行已被更改。 如果提供了 changed,它將指明是將受影響的行標記為已更改 (changed
=True) 還是未更改 (changed=False)。
-
window.touchwin()? 假定整個窗口已被更改,其目的是用于繪制優化。
-
window.vline(ch, n)? -
window.vline(y, x, ch, n) 顯示一條起始于
(y, x)長度為 n 個字符 ch 的垂直線。
常量?
curses 模塊定義了以下數據成員:
-
curses.version? 一個代表當前模塊版本的字節串對象。 也作
__version__。
有些常量可用于指定字符單元屬性。 實際可用的常量取決于具體的系統。
屬性 |
含義 |
|---|---|
|
備用字符集模式 |
|
閃爍模式 |
|
粗體模式 |
|
暗淡模式 |
|
不可見或空白模式 |
|
斜體模式 |
|
正常屬性 |
|
保護模式 |
|
反轉背景色和前景色 |
|
突出模式 |
|
下劃線模式 |
|
水平突出顯示 |
|
左高亮 |
|
底部高亮 |
|
右高亮 |
|
頂部高亮 |
|
垂直突出顯示 |
|
用于提取字符的位掩碼 |
3.7 新版功能: A_ITALIC was added.
有幾個常量可用于提取某些方法返回的相應屬性。
位掩碼 |
含義 |
|---|---|
|
用于提取屬性的位掩碼 |
|
用于提取字符的位掩碼 |
|
用于提取顏色對字段信息的位掩碼 |
鍵由名稱以 KEY_ 開頭的整數常量引用。確切的可用鍵取決于系統。
關鍵常數 |
(Windows 注冊表的)鍵 |
|---|---|
|
最小鍵值 |
|
中斷鍵(不可靠) |
|
向下箭頭 |
|
向上箭頭 |
|
向左箭頭 |
|
向右箭頭 |
|
Home 鍵 (上+左箭頭) |
|
退格(不可靠) |
|
功能鍵。 支持至多 64 個功能鍵。 |
|
功能鍵 n 的值 |
|
刪除行 |
|
插入行 |
|
刪除字符 |
|
插入字符或進入插入模式 |
|
退出插入字符模式 |
|
清空屏幕 |
|
清空至屏幕底部 |
|
清空至行尾 |
|
向前滾動 1 行 |
|
向后滾動 1 行 (反轉) |
|
下一頁 |
|
上一頁 |
|
設置制表符 |
|
清除制表制 |
|
清除所有制表符 |
|
回車或發送 (不可靠) |
|
軟件 (部分) 重置 (不可靠) |
|
重置或硬重置 (不可靠) |
|
打印 |
|
Home 向下或到底 (左下) |
|
鍵盤的左上角 |
|
鍵盤的右上角 |
|
鍵盤的中心 |
|
鍵盤左下方 |
|
鍵盤右下方 |
|
回退制表符 |
|
Beg (開始) |
|
取消 |
|
關閉 |
|
Cmd (命令行) |
|
復制 |
|
創建 |
|
End |
|
退出 |
|
查找 |
|
幫助 |
|
標記 |
|
消息 |
|
移動 |
|
下一個 |
|
打開 |
|
選項 |
|
Prev (上一個) |
|
重做 |
|
Ref (引用) |
|
刷新 |
|
替換 |
|
重啟 |
|
恢復 |
|
保存 |
|
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 + 移動 |
|
Shift + 下一個 |
|
Shift + 選項 |
|
Shift + 上一個 |
|
Shift + 打印 |
|
Shift + 重做 |
|
Shift + 替換 |
|
Shift + 向右箭頭 |
|
Shift + 恢復 |
|
Shift + 保存 |
|
Shift + 掛起 |
|
Shift + 撤銷 |
|
掛起 |
|
撤銷操作 |
|
鼠標事件已發生 |
|
終端大小改變事件 |
|
最大鍵值 |
在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 近似符號。
注解
只有在調用 initscr() 之后才能使用它們
ACS代碼 |
含義 |
|---|---|
|
右上角的別名 |
|
實心方塊 |
|
正方形 |
|
水平線的別名 |
|
左上角的別名 |
|
頂部 T 型的別名 |
|
底部 T 型 |
|
正方形 |
|
棋盤(點刻) |
|
向下箭頭 |
|
等級符 |
|
菱形 |
|
大于或等于 |
|
水平線 |
|
燈形符號 |
|
向左箭頭 |
|
小于或等于 |
|
左下角 |
|
右下角 |
|
左側 T 型 |
|
不等號 |
|
字母π |
|
正負號 |
|
加號 |
|
向右箭頭 |
|
右側 T 型 |
|
掃描線 1 |
|
掃描線3 |
|
掃描線7 |
|
掃描線 9 |
|
右下角的別名 |
|
垂直線的別名 |
|
右側 T 型的別名 |
|
左下角的別名 |
|
底部 T 型的別名 |
|
左側 T 型的別名 |
|
交叉或大加號的替代名稱 |
|
英鎊 |
|
頂部 T 型 |
|
向上箭頭 |
|
左上角 |
|
右上角 |
|
垂線 |
下表列出了預定義的顏色:
常數 |
顏色 |
|---|---|
|
黑色 |
|
藍色 |
|
青色(淺綠藍色) |
|
綠色 |
|
洋紅色(紫紅色) |
|
紅色 |
|
白色 |
|
黃色 |
curses.textpad --- 用于 curses 程序的文本輸入控件?
curses.textpad 模塊提供了一個 Textbox 類,該類在 curses 窗口中處理基本的文本編輯,支持一組與 Emacs 類似的鍵綁定(因此這也適用于 Netscape Navigator, BBedit 6.x, FrameMaker 和許多其他程序)。 該模塊還提供了一個繪制矩形的函數,適用于容納文本框或其他目的。
curses.textpad 模塊定義了以下函數:
-
curses.textpad.rectangle(win, uly, ulx, lry, lrx)? 繪制一個矩形。 第一個參數必須為窗口對象;其余參數均為相對于該窗口的坐標值。 第二和第三個參數為要繪制的矩形的左上角的 y 和 x 坐標值;第四和第五個參數為其右下角的 y 和 x 坐標值。 將會使用 VT100/IBM PC 形式的字符在可用的終端上(包括 xterm 和大多數其他軟件終端模擬器)繪制矩形。 在其他情況下則將使用 ASCII 橫杠、豎線和加號繪制。
文本框對象?
你可以通過如下方式實例化一個 Textbox:
-
class
curses.textpad.Textbox(win)? 返回一個文本框控件對象。 win 參數必須是一個 curses 窗口 對象,文本框將被包含在其中。 文本框的編輯光標在初始時位于包含窗口的左上角,坐標值為
(0, 0)。 實例的stripspaces旗標初始時為啟用。Textbox對象具有以下方法:-
edit([validator])? 這是你通常將使用的入口點。 它接受編輯按鍵直到鍵入了一個終止按鍵。 如果提供了 validator,它必須是一個函數。 它將在每次按鍵時被調用并傳入相應的按鍵作作為形參;命令發送將在結果上執行。 此方法會以字符串形式返回窗口內容;是否包括窗口中的空白將受到
stripspaces屬性的影響。
-
do_command(ch)? 處理單個按鍵命令。以下是支持的特殊按鍵:
按鍵
動作
Control-A
轉到窗口的左邊緣。
Control-B
光標向左,如果可能,包含前一行。
Control-D
刪除光標下的字符。
Control-E
前往右邊緣(stripspaces 關閉時)或者行尾(stripspaces 啟用時)。
Control-F
向右移動光標,適當時換行到下一行。
Control-G
終止,返回窗口內容。
Control-H
向后刪除字符。
Control-J
如果窗口是1行則終止,否則插入換行符。
Control-K
如果行為空,則刪除它,否則清除到行尾。
Control-L
刷新屏幕。
Control-N
光標向下;向下移動一行。
Control-O
在光標位置插入一個空行。
Control-P
光標向上;向上移動一行。
如果光標位于無法移動的邊緣,則移動操作不執行任何操作。在可能的情況下,支持以下同義詞:
常數
按鍵
KEY_LEFTControl-B
KEY_RIGHTControl-F
KEY_UPControl-P
KEY_DOWNControl-N
KEY_BACKSPACEControl-h
所有其他按鍵將被視為插入給定字符并右移的命令(帶有自動折行)。
-
gather()? 以字符串形式返回窗口內容;是否包括窗口中的空白將受到
stripspaces成員的影響。
-
stripspaces? 此屬性是控制窗口中空白解讀方式的旗標。 當啟用時,每一行的末尾空白會被忽略;任何將光標定位至末尾空白的光標動作都將改為前往該行末尾,并且在收集窗口內容時將去除末尾空白。
-
