curses
— 字元單元顯示終端處理¶
原始碼: Lib/curses
curses
模組提供了一個 curses 庫的介面,它是可移植高階終端處理的事實標準。
雖然 curses 在 Unix 環境中使用最為廣泛,但也有適用於 Windows、DOS 以及可能其他系統的版本。此擴充套件模組旨在匹配 ncurses 的 API,ncurses 是託管在 Linux 和 Unix 的 BSD 變體上的開源 curses 庫。
可用性:非 Android、非 iOS、非 WASI。
此模組在 移動平臺 或 WebAssembly 平臺 上不受支援。
註解
每當文件中提到字元時,它可以指定為整數、單字元 Unicode 字串或單位元組位元組字串。
每當文件中提到字串時,它可以指定為 Unicode 字串或位元組字串。
參見
- 模組
curses.ascii
用於處理 ASCII 字元的實用工具,無論您的語言環境設定如何。
- 模組
curses.panel
一個面板堆疊擴充套件,它為 curses 視窗添加了深度。
- 模組
curses.textpad
用於 curses 的可編輯文字小部件,支援類似 Emacs 的繫結。
- 使用 Python 進行 Curses 程式設計
關於使用 Python 進行 curses 程式設計的教程資料,作者為 Andrew Kuchling 和 Eric Raymond。
函式¶
模組 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 - 1
之間。返回一個 3 元組,其中包含給定顏色的 R、G、B 值,該值將在0
(無分量)和1000
(最大分量)之間。
- curses.color_pair(pair_number)¶
返回用於以指定顏色對顯示文字的屬性值。僅支援前 256 個顏色對。此屬性值可以與
A_STANDOUT
、A_REVERSE
和其他A_*
屬性組合使用。pair_number()
是此函式的對應函式。
- curses.curs_set(visibility)¶
設定游標狀態。visibility 可以設定為
0
、1
或2
,分別表示不可見、正常或非常可見。如果終端支援請求的可見性,則返回先前的游標狀態;否則引發異常。在許多終端上,“可見”模式是下劃線游標,“非常可見”模式是塊游標。
- curses.def_prog_mode()¶
將當前終端模式儲存為“程式”模式,即正在執行的程式使用 curses 時的模式。(其對應模式是“shell”模式,用於程式不使用 curses 時。)後續呼叫
reset_prog_mode()
將恢復此模式。
- curses.def_shell_mode()¶
將當前終端模式儲存為“shell”模式,即正在執行的程式不使用 curses 時的模式。(其對應模式是“程式”模式,即程式正在使用 curses 功能時。)後續呼叫
reset_shell_mode()
將恢復此模式。
- curses.delay_output(ms)¶
在輸出中插入一個 ms 毫秒的暫停。
- curses.doupdate()¶
更新物理螢幕。curses 庫維護兩個資料結構,一個表示當前物理螢幕內容,另一個表示所需的下一個狀態的虛擬螢幕。
doupdate()
基礎更新物理螢幕以匹配虛擬螢幕。在對視窗執行諸如
addstr()
之類的寫入操作後,可以透過noutrefresh()
呼叫更新虛擬螢幕。普通的refresh()
呼叫只是noutrefresh()
後跟doupdate()
;如果需要更新多個視窗,則可以透過對所有視窗發出noutrefresh()
呼叫,然後發出單個doupdate()
來提高效能並可能減少螢幕閃爍。
- curses.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()¶
在
getch()
返回KEY_MOUSE
以指示滑鼠事件後,應呼叫此方法以檢索排隊的滑鼠事件,該事件表示為 5 元組(id, x, y, z, bstate)
。id 是用於區分多個裝置的 ID 值,x、y、z 是事件的座標。(z 當前未使用。)bstate 是一個整數值,其位將被設定以指示事件的型別,並且將是以下一個或多個常量的按位或運算結果,其中 n 是從 1 到 5 的按鈕編號:BUTTONn_PRESSED
、BUTTONn_RELEASED
、BUTTONn_CLICKED
、BUTTONn_DOUBLE_CLICKED
、BUTTONn_TRIPLE_CLICKED
、BUTTON_SHIFT
、BUTTON_CTRL
、BUTTON_ALT
。在 3.10 版本中更改: 如果底層 curses 庫提供了
BUTTON5_*
常量,則現在會公開這些常量。
- curses.getwin(file)¶
讀取先前呼叫
window.putwin()
儲存在檔案中的視窗相關資料。然後,該例程使用該資料建立並初始化一個新視窗,並返回新的視窗物件。
- 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
。此函式僅出於歷史原因而包含,因為所有現代軟體終端模擬器都具有此類功能。
- 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 - 1
之間。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 - 1
之間,或者在呼叫use_default_colors()
後,可以為-1
。如果顏色對之前已初始化,螢幕將被重新整理,並且該顏色對的所有例項都將更改為新的定義。
- curses.is_term_resized(nlines, ncols)¶
如果
resize_term()
將修改視窗結構,則返回True
,否則返回False
。
- curses.keyname(k)¶
以位元組物件的形式返回編號為 k 的鍵的名稱。生成可列印 ASCII 字元的鍵的名稱是該鍵的字元。控制鍵組合的名稱是一個雙位元組位元組物件,由一個插入符號 (
b'^'
) 後跟相應的可列印 ASCII 字元組成。alt 鍵組合 (128–255) 的名稱是一個位元組物件,由字首b'M-'
後跟相應的 ASCII 字元的名稱組成。
- curses.killchar()¶
以單位元組位元組物件的形式返回使用者當前的行刪除字元。在 Unix 作業系統下,這是 curses 程式的控制 tty 的屬性,不由 curses 庫本身設定。
- 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)¶
建立並返回一個指向具有給定行數和列數的新 pad 資料結構的指標。將 pad 作為視窗物件返回。
pad 類似於視窗,只是它不受螢幕大小的限制,並且不一定與螢幕的特定部分相關聯。當需要一個大視窗,並且一次只有一個視窗的一部分在螢幕上時,可以使用 pad。不會發生 pad 的自動重新整理(例如,來自滾動或輸入的回顯)。pad 的
refresh()
和noutrefresh()
方法需要 6 個引數來指定要顯示的 pad 的部分以及用於顯示的螢幕上的位置。引數為 pminrow、pmincol、sminrow、smincol、smaxrow、smaxcol;p 引數引用要顯示的 pad 區域的左上角,s 引數定義螢幕上的一個裁剪框,pad 區域將在其中顯示。
- curses.newwin(nlines, ncols)¶
- curses.newwin(nlines, ncols, begin_y, begin_x)
返回一個新的 視窗,其左上角位於
(begin_y, begin_x)
,其高度/寬度為 nlines/ncols。預設情況下,視窗將從指定位置延伸到螢幕的右下角。
- curses.nl()¶
進入換行模式。此模式在輸入時將回車鍵轉換為換行符,並在輸出時將換行符轉換為回車符和換行符。換行模式最初處於開啟狀態。
- curses.nocbreak()¶
離開 cbreak 模式。返回帶有行緩衝的正常“熟”模式。
- curses.noecho()¶
離開回顯模式。輸入字元的回顯被關閉。
- curses.nonl()¶
離開換行模式。停用輸入時將回車符轉換為換行符,並停用輸出時將換行符轉換為換行符/回車符的底層轉換(但這不會更改
addch('\n')
的行為,它始終在虛擬螢幕上執行等效的回車符和換行符操作)。關閉轉換後,curses 有時可以稍微加快垂直移動速度;此外,它將能夠檢測輸入的回車鍵。
- curses.noqiflush()¶
當使用
noqiflush()
例程時,與INTR
、QUIT
和SUSP
字元關聯的輸入和輸出佇列的正常重新整理將不會執行。 如果您希望在處理程式退出後,輸出像中斷沒有發生一樣繼續,您可能需要在訊號處理程式中呼叫noqiflush()
。
- curses.noraw()¶
離開原始模式。返回到帶有行緩衝的正常“熟”模式。
- curses.pair_content(pair_number)¶
返回一個元組
(fg, bg)
,其中包含請求的顏色對的顏色。pair_number 的值必須介於0
和COLOR_PAIRS - 1
之間。
- curses.pair_number(attr)¶
返回由屬性值 attr 設定的顏色對的編號。
color_pair()
是此函式的對應函式。
- curses.qiflush([flag])¶
如果 flag 為
False
,則效果與呼叫noqiflush()
相同。如果 flag 為True
,或者未提供引數,則在讀取這些控制字元時將重新整理佇列。
- curses.raw()¶
進入原始模式。在原始模式下,正常的行緩衝和中斷、退出、掛起以及流控制鍵的處理將被關閉;字元將逐個呈現給 curses 輸入函式。
- curses.reset_prog_mode()¶
將終端恢復到“程式”模式,如之前透過
def_prog_mode()
儲存的那樣。
- curses.reset_shell_mode()¶
將終端恢復到“shell”模式,如之前透過
def_shell_mode()
儲存的那樣。
- curses.resize_term(nlines, ncols)¶
由
resizeterm()
使用的後端函式,執行大部分工作;在調整視窗大小時,resize_term()
會用空格填充擴充套件的區域。呼叫應用程式應使用適當的資料填充這些區域。resize_term()
函式嘗試調整所有視窗的大小。但是,由於 pad 的呼叫約定,如果不與應用程式進行額外的互動,則無法調整這些視窗的大小。
- curses.resizeterm(nlines, ncols)¶
將標準視窗和當前視窗的大小調整為指定的尺寸,並調整 curses 庫使用的其他用於記錄視窗尺寸的簿記資料(特別是 SIGWINCH 處理程式)。
- curses.get_escdelay()¶
檢索由
set_escdelay()
設定的值。在 3.9 版本中新增。
- curses.set_escdelay(ms)¶
設定在讀取跳脫字元後等待的毫秒數,以區分鍵盤上輸入的單個跳脫字元與游標和功能鍵傳送的轉義序列。
在 3.9 版本中新增。
- curses.get_tabsize()¶
檢索由
set_tabsize()
設定的值。在 3.9 版本中新增。
- curses.set_tabsize(size)¶
設定當 curses 庫將製表符轉換為空格並將其新增到視窗時使用的列數。
在 3.9 版本中新增。
- 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()¶
返回終端支援的所有影片屬性的邏輯或。當 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.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, /, *args, **kwargs)¶
初始化 curses 並呼叫另一個可呼叫物件 func,它應該是您 curses 應用的其餘部分。如果應用程式引發異常,此函式將在重新引發異常並生成回溯之前將終端恢復到正常狀態。然後,可呼叫物件 func 會將主視窗 'stdscr' 作為其第一個引數傳遞,然後傳遞給
wrapper()
的任何其他引數。在呼叫 func 之前,wrapper()
會開啟 cbreak 模式,關閉回顯,啟用終端鍵盤,並在終端支援顏色時初始化顏色。退出時(無論是正常退出還是由於異常退出),它會恢復 cooked 模式,開啟回顯,並停用終端鍵盤。
視窗物件¶
視窗物件,如上面 initscr()
和 newwin()
返回的物件,具有以下方法和屬性
- window.addch(ch[, attr])¶
- window.addch(y, x, ch[, attr])
使用屬性 attr 在
(y, x)
處繪製字元 ch,覆蓋之前在該位置繪製的任何字元。預設情況下,字元位置和屬性是視窗物件的當前設定。註解
在視窗、子視窗或 pad 外部寫入會引發
curses.error
。嘗試寫入視窗、子視窗或 pad 的右下角會導致在列印字元後引發異常。
- window.addnstr(str, n[, attr])¶
- window.addnstr(y, x, str, n[, attr])
使用屬性 attr 在
(y, x)
處繪製字元字串 str 的最多 n 個字元,覆蓋顯示器上之前的內容。
- window.addstr(str[, attr])¶
- window.addstr(y, x, str[, attr])
使用屬性 attr 在
(y, x)
處繪製字元字串 str,覆蓋顯示器上之前的內容。註解
在視窗、子視窗或 pad 外部寫入會引發
curses.error
。嘗試寫入視窗、子視窗或 pad 的右下角會導致在列印字串後引發異常。此 Python 模組的後端 ncurses 中的一個 bug 會在調整視窗大小時導致 SegFault。這在 ncurses-6.1-20190511 中已修復。如果您被困在使用早期版本的 ncurses,如果您不使用嵌入換行符的 str 呼叫
addstr()
,則可以避免觸發此問題。相反,請為每行單獨呼叫addstr()
。
- window.attroff(attr)¶
從應用於當前視窗所有寫入操作的“背景”集中刪除屬性 attr。
- window.attron(attr)¶
將屬性 attr 新增到應用於當前視窗所有寫入操作的“背景”集中。
- window.attrset(attr)¶
將“背景”屬性集設定為 attr。此集最初為
0
(無屬性)。
- window.bkgd(ch[, attr])¶
將視窗的背景屬性設定為字元 ch,屬性為 attr。然後,此更改將應用於該視窗中的每個字元位置。
視窗中每個字元的屬性都會更改為新的背景屬性。
前一個背景字元出現的任何位置都會更改為新的背景字元。
- window.bkgdset(ch[, attr])¶
設定視窗的背景。視窗的背景由一個字元和屬性的任意組合組成。背景的屬性部分與寫入視窗的所有非空白字元組合(進行或運算)。背景的字元和屬性部分都與空白字元組合。背景成為字元的屬性,並隨字元一起移動,進行任何滾動和插入/刪除行/字元操作。
- window.border([ls[, rs[, ts[, bs[, tl[, tr[, bl[, br]]]]]]]])¶
在視窗邊緣繪製邊框。每個引數指定用於邊框特定部分的字元;有關更多詳細資訊,請參見下表。
註解
任何引數的
0
值都會導致該引數使用預設字元。不能使用關鍵字引數。預設值在此表中列出引數
描述
預設值
ls
左側
rs
右側
ts
頂部
bs
底部
tl
左上角
tr
右上角
bl
左下角
br
右下角
- window.chgat(attr)¶
- window.chgat(num, attr)
- window.chgat(y, x, attr)
- window.chgat(y, x, num, attr)
設定當前游標位置或指定位置
(y, x)
處num個字元的屬性。如果未提供 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)
“派生視窗”的縮寫,
derwin()
與呼叫subwin()
相同,只是 begin_y 和 begin_x 是相對於視窗原點的,而不是相對於整個螢幕的。返回派生視窗的視窗物件。
- window.enclose(y, x)¶
測試給定的螢幕相關字元單元座標對是否被給定的視窗包圍,返回
True
或False
。它對於確定螢幕視窗的哪個子集包圍滑鼠事件的位置非常有用。在 3.10 版本中更改: 之前它返回
1
或0
而不是True
或False
。
- window.encoding¶
用於編碼方法引數(Unicode 字串和字元)的編碼。當建立子視窗時,例如使用
window.subwin()
,編碼屬性會從父視窗繼承。預設情況下,使用當前區域設定編碼(請參閱locale.getencoding()
)。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])
在
(y, x)
處繪製字元 ch,屬性為 attr,並將從位置 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])¶
立即更新顯示(將實際螢幕與之前的繪製/刪除方法同步)。
僅當視窗是由
newpad()
建立的 pad 時,才能指定 6 個可選引數。需要額外的引數來指示 pad 和螢幕的哪一部分參與其中。pminrow 和 pmincol 指定要在 pad 中顯示的矩形的左上角。sminrow、smincol、smaxrow 和 smaxcol 指定要在螢幕上顯示的矩形的邊緣。要在 pad 中顯示的矩形的右下角是根據螢幕座標計算的,因為矩形必須大小相同。兩個矩形都必須完全包含在其各自的結構中。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()¶
關閉突出顯示屬性。在某些終端上,這具有關閉所有屬性的副作用。
- 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[, attr])¶
- window.vline(y, x, ch, n[, attr])
顯示一條垂直線,從
(y, x)
開始,長度為 n,由帶有屬性 attr 的字元 ch 組成。
常量¶
curses
模組定義以下資料成員
- curses.version¶
- curses.__version__¶
一個表示模組當前版本的位元組物件。
- curses.ncurses_version¶
一個命名元組,包含 ncurses 庫版本的三個組成部分:major、minor 和 patch。所有值都是整數。也可以透過名稱訪問這些組成部分,因此
curses.ncurses_version[0]
等同於curses.ncurses_version.major
,依此類推。可用性:如果使用了 ncurses 庫。
在版本 3.8 中新增。
- curses.COLORS¶
終端可以支援的最大顏色數。僅在呼叫
start_color()
後定義。
- curses.COLOR_PAIRS¶
終端可以支援的最大顏色對數。僅在呼叫
start_color()
後定義。
- curses.COLS¶
螢幕的寬度,即列數。僅在呼叫
initscr()
後定義。由update_lines_cols()
、resizeterm()
和resize_term()
更新。
- curses.LINES¶
螢幕的高度,即行數。僅在呼叫
initscr()
後定義。由update_lines_cols()
、resizeterm()
和resize_term()
更新。
一些常量可用於指定字元單元格屬性。可用的確切常量取決於系統。
屬性 |
含義 |
---|---|
|
備用字元集模式 |
|
閃爍模式 |
|
粗體模式 |
|
暗淡模式 |
|
不可見或空白模式 |
|
斜體模式 |
|
正常屬性 |
|
保護模式 |
|
反轉背景和前景色 |
|
突出顯示模式 |
|
下劃線模式 |
|
水平高亮 |
|
左側高亮 |
|
低高亮 |
|
右側高亮 |
|
頂部高亮 |
|
垂直高亮 |
3.7 版本新增: A_ITALIC
被新增。
提供多個常量用於提取某些方法返回的相應屬性。
位掩碼 |
含義 |
---|---|
|
提取屬性的位掩碼 |
|
提取字元的位掩碼 |
|
提取顏色對欄位資訊的位掩碼 |
鍵由以 KEY_
開頭的整數常量表示。 可用的確切鍵帽取決於系統。
鍵常量 |
鍵 |
---|---|
|
最小鍵值 |
|
Break 鍵(不可靠) |
|
下箭頭 |
|
上箭頭 |
|
左箭頭 |
|
右箭頭 |
|
Home 鍵(向上+左箭頭) |
|
退格鍵(不可靠) |
|
功能鍵。 最多支援 64 個功能鍵。 |
|
功能鍵 n 的值 |
|
刪除行 |
|
插入行 |
|
刪除字元 |
|
插入字元或進入插入模式 |
|
退出插入字元模式 |
|
清除螢幕 |
|
清除到螢幕末尾 |
|
清除到行末 |
|
向前滾動 1 行 |
|
向後(反向)滾動 1 行 |
|
下一頁 |
|
上一頁 |
|
設定製表符 |
|
清除製表符 |
|
清除所有制表符 |
|
回車或傳送(不可靠) |
|
軟(部分)重置(不可靠) |
|
重置或硬重置(不可靠) |
|
列印 |
|
Home 向下或底部(左下) |
|
小鍵盤左上角 |
|
小鍵盤右上角 |
|
小鍵盤中心 |
|
小鍵盤左下角 |
|
小鍵盤右下角 |
|
反向製表符 |
|
開始 |
|
取消 |
|
關閉 |
|
Cmd (命令) |
|
複製 |
|
建立 |
|
結束 |
|
退出 |
|
查詢 |
|
幫助 |
|
標記 |
|
訊息 |
|
移動 |
|
下一個 |
|
開啟 |
|
選項 |
|
上一個(previous) |
|
重做 |
|
參考(reference) |
|
重新整理 |
|
替換 |
|
重啟 |
|
恢復 |
|
儲存 |
|
Shifted Beg (beginning) (Shift + 開始) |
|
Shifted Cancel (Shift + 取消) |
|
Shifted Command (Shift + 命令) |
|
Shifted Copy (Shift + 複製) |
|
Shifted Create (Shift + 建立) |
|
Shifted Delete char (Shift + 刪除字元) |
|
Shifted Delete line (Shift + 刪除行) |
|
選擇 |
|
Shifted End (Shift + 結束) |
|
Shifted Clear line (Shift + 清除行) |
|
Shifted Exit (Shift + 退出) |
|
Shifted Find (Shift + 查詢) |
|
Shifted Help (Shift + 幫助) |
|
Shifted Home (Shift + Home) |
|
Shifted Input (Shift + 輸入) |
|
Shifted Left arrow (Shift + 左箭頭) |
|
Shifted Message (Shift + 訊息) |
|
Shifted Move (Shift + 移動) |
|
Shifted Next (Shift + 下一個) |
|
Shifted Options (Shift + 選項) |
|
Shifted Prev (Shift + 上一個) |
|
Shifted Print (Shift + 列印) |
|
Shifted Redo (Shift + 重做) |
|
Shifted Replace (Shift + 替換) |
|
Shifted Right arrow (Shift + 右箭頭) |
|
Shifted Resume (Shift + 恢復) |
|
Shifted Save (Shift + 儲存) |
|
Shifted Suspend (Shift + 暫停) |
|
Shifted Undo (Shift + 撤銷) |
|
暫停 |
|
撤銷 |
|
發生了滑鼠事件 |
|
終端調整大小事件 |
|
最大鍵值 |
在 VT100 及其軟體模擬器(例如 X 終端模擬器)上,通常至少有四個功能鍵(KEY_F1
, KEY_F2
, KEY_F3
, KEY_F4
)可用,並且箭頭鍵以顯而易見的方式對映到 KEY_UP
, KEY_DOWN
, KEY_LEFT
和 KEY_RIGHT
。如果您的機器有 PC 鍵盤,則可以安全地期望箭頭鍵和十二個功能鍵(較舊的 PC 鍵盤可能只有十個功能鍵);此外,以下小鍵盤對映是標準的
鍵帽 |
常量 |
---|---|
插入 |
KEY_IC |
刪除 |
KEY_DC |
Home |
KEY_HOME |
結束 |
KEY_END |
Page Up |
KEY_PPAGE |
Page Down |
KEY_NPAGE |
下表列出了來自備用字元集的字元。這些字元是從 VT100 終端繼承的,通常在 X 終端等軟體模擬器上可用。當沒有可用的圖形時,curses 會退回到粗略的可列印 ASCII 近似值。
註解
這些僅在呼叫 initscr()
後才可用。
ACS 程式碼 |
含義 |
---|---|
|
右上角的別名 |
|
實心方塊 |
|
方塊板 |
|
水平線的別名 |
|
左上角的別名 |
|
頂端T型連線的別名 |
|
底端T型連線 |
|
專案符號 |
|
棋盤格(點畫) |
|
向下箭頭 |
|
度數符號 |
|
菱形 |
|
大於或等於號 |
|
水平線 |
|
燈籠符號 |
|
向左箭頭 |
|
小於或等於號 |
|
左下角 |
|
右下角 |
|
左側T型連線 |
|
不等於號 |
|
字母 pi |
|
加號或減號 |
|
大加號 |
|
向右箭頭 |
|
右側T型連線 |
|
掃描線 1 |
|
掃描線 3 |
|
掃描線 7 |
|
掃描線 9 |
|
右下角的別名 |
|
垂直線的別名 |
|
右側T型連線的別名 |
|
左下角的別名 |
|
底部T型連線的別名 |
|
左側T型連線的別名 |
|
交叉或大加號的別名 |
|
英鎊符號 |
|
頂部T型連線 |
|
向上箭頭 |
|
左上角 |
|
右上角 |
|
垂直線 |
下表列出了 getmouse()
使用的滑鼠按鈕常量
滑鼠按鈕常量 |
含義 |
---|---|
|
滑鼠按鈕 n 被按下 |
|
滑鼠按鈕 n 被釋放 |
|
滑鼠按鈕 n 被單擊 |
|
滑鼠按鈕 n 被雙擊 |
|
滑鼠按鈕 n 被三擊 |
|
按鈕狀態更改期間按下 Shift 鍵 |
|
按鈕狀態更改期間按下 Control 鍵 |
|
按鈕狀態更改期間按下 Control 鍵 |
在 3.10 版本中更改: 如果底層 curses 庫提供了 BUTTON5_*
常量,則現在會公開這些常量。
下表列出了預定義的顏色
常量 |
顏色 |
---|---|
|
黑色 |
|
藍色 |
|
青色(淡綠藍色) |
|
綠色 |
|
洋紅色(紫紅色) |
|
紅色 |
|
白色 |
|
黃色 |
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 物件¶
您可以按如下方式例項化一個 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
游標向上移動;向上移動一行。
如果游標位於無法移動的邊緣,則移動操作不起作用。儘可能支援以下同義詞
常量
按鍵
Control-B
Control-F
Control-P
Control-N
Control-h
所有其他按鍵都被視為插入給定字元並向右移動(帶換行)的命令。
- gather()¶
返回視窗內容作為字串;視窗中是否包含空格受
stripspaces
成員的影響。
- stripspaces¶
此屬性是一個標誌,用於控制視窗中空格的解釋。當它啟用時,每行末尾的空格將被忽略;任何將使游標落在末尾空格上的游標移動都將改為移動到該行末尾,並且當收集視窗內容時,將刪除末尾的空格。