curses
— 字元單元格顯示的終端處理¶
原始碼: Lib/curses
curses
模組提供了 curses 庫的介面,它是可移植高階終端處理的事實標準。
雖然 curses 在 Unix 環境中應用最廣泛,但也有適用於 Windows、DOS 以及其他系統的版本。此擴充套件模組旨在與 ncurses 的 API 匹配,ncurses 是一個託管在 Linux 和 BSD Unix 變體上的開源 curses 庫。
可用性: 非 Android、非 iOS、非 WASI。
該模組在移動平臺或WebAssembly 平臺上不受支援。
備註
文件中提及 字元 時,它可以指定為一個整數、一個單字元的 Unicode 字串或一個單位元組的位元組字串。
文件中提及 字元字串 時,它可以指定為一個 Unicode 字串或一個位元組字串。
參見
- 模組
curses.ascii
用於處理 ASCII 字元的實用程式,無論您的區域設定如何。
- 模組
curses.panel
增加了 curses 視窗深度的面板堆疊擴充套件。
- 模組
curses.textpad
支援 Emacs 類繫結的可編輯文字部件,用於 curses。
- 使用 Python 進行 Curses 程式設計
Andrew Kuchling 和 Eric Raymond 編寫的關於使用 Python 和 curses 的教程資料。
函式¶
模組 curses
定義了以下異常
- exception curses.error¶
當 curses 庫函式返回錯誤時引發的異常。
備註
當函式的 x 或 y 引數是可選時,它們預設為當前游標位置。當 attr 是可選時,它預設為 A_NORMAL
。
模組 curses
定義了以下函式
- curses.assume_default_colors(fg, bg, /)¶
允許在支援此功能的終端上使用顏色的預設值。使用此功能以支援應用程式的透明度。
將終端預設的前景/背景顏色分配給顏色號
-1
。因此init_pair(x, COLOR_RED, -1)
會將顏色對 x 初始化為紅色前景,預設背景;init_pair(x, -1, COLOR_BLUE)
會將顏色對 x 初始化為預設前景,藍色背景。將顏色對
0
的定義更改為(fg, bg)
。
在 3.14 版本加入。
- curses.baudrate()¶
返回終端的輸出速度,單位為位元/秒。在軟體終端模擬器上,它將具有固定的高值。出於歷史原因而包含;以前,它用於編寫時間延遲的輸出迴圈,偶爾也根據線路速度改變介面。
- curses.beep()¶
發出短促的注意音。
- curses.can_change_color()¶
返回
True
或False
,取決於程式設計師是否可以更改終端顯示的顏色。
- curses.cbreak()¶
進入 cbreak 模式。在 cbreak 模式(有時稱為“rare”模式)下,正常的 tty 行緩衝被關閉,字元可以逐個讀取。然而,與原始模式不同,特殊字元(中斷、退出、暫停和流量控制)保留它們對 tty 驅動程式和呼叫程式的影響。首先呼叫
raw()
然後呼叫cbreak()
會使終端處於 cbreak 模式。
- curses.color_content(color_number)¶
返回顏色 color_number 的紅、綠、藍 (RGB) 分量的強度,其值必須在
0
到COLORS - 1
之間。返回一個包含給定顏色的 R、G、B 值的 3 元組,其值將在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
顏色對只能透過use_default_colors()
和assume_default_colors()
更改)。fg 和 bg 引數的值必須在0
到COLORS - 1
之間,或者在呼叫use_default_colors()
或assume_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)
返回一個新的 window,其左上角位於
(begin_y, begin_x)
,高/寬為 nlines/ncols。預設情況下,視窗將從指定位置延伸到螢幕的右下角。
- curses.nl()¶
進入換行模式。此模式將回車鍵在輸入時轉換為換行符,並將換行符在輸出時轉換為回車和換行符。換行模式最初是開啟的。
- curses.nocbreak()¶
退出 cbreak 模式。返回到具有行緩衝的正常“cooked”模式。
- curses.noecho()¶
退出回顯模式。關閉輸入字元的回顯。
- curses.nonl()¶
退出換行模式。停用輸入時回車轉換為換行符,並停用輸出時換行符到換行符/回車符的低階轉換(但這不會改變
addch('\n')
的行為,它總是在虛擬螢幕上執行等效的回車和換行)。關閉轉換後,curses 有時可以稍微加快垂直移動;此外,它將能夠在輸入時檢測回車鍵。
- curses.noqiflush()¶
當使用
noqiflush()
例程時,與INTR
、QUIT
和SUSP
字元關聯的輸入和輸出佇列的正常重新整理將不會執行。如果您希望在處理程式退出後輸出繼續進行,就像沒有發生中斷一樣,您可能需要在訊號處理程式中呼叫noqiflush()
。
- curses.noraw()¶
退出原始模式。返回到具有行緩衝的正常“cooked”模式。
- 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()¶
等同於
assume_default_colors(-1, -1)
。
- curses.wrapper(func, /, *args, **kwargs)¶
初始化 curses 並呼叫另一個可呼叫物件 func,它應該是您的其餘 curses 應用程式。如果應用程式引發異常,此函式將在重新引發異常並生成回溯之前將終端恢復到正常狀態。可呼叫物件 func 將其主視窗 'stdscr' 作為第一個引數傳遞,後跟傳遞給
wrapper()
的任何其他引數。在呼叫 func 之前,wrapper()
開啟 cbreak 模式,關閉回顯,啟用終端鍵盤,並在終端支援顏色時初始化顏色。退出時(無論是正常退出還是因異常退出)它會恢復 cooked 模式,開啟回顯,並停用終端鍵盤。
視窗物件¶
- window.addch(ch[, attr])¶
- window.addch(y, x, ch[, attr])
在
(y, x)
處繪製字元 ch,並帶有屬性 attr,覆蓋先前在該位置繪製的任何字元。預設情況下,字元位置和屬性是視窗物件的當前設定。備註
在視窗、子視窗或 pad 外部寫入會引發
curses.error
。嘗試寫入視窗、子視窗或 pad 的右下角會在字元列印後引發異常。
- window.addnstr(str, n[, attr])¶
- window.addnstr(y, x, str, n[, attr])
在
(y, x)
處繪製字元字串 str 的最多 n 個字元,並帶有屬性 attr,覆蓋顯示上先前存在的任何內容。
- window.addstr(str[, attr])¶
- window.addstr(y, x, str[, attr])
在
(y, x)
處繪製字元字串 str,並帶有屬性 attr,覆蓋顯示上先前存在的任何內容。備註
在視窗、子視窗或 pad 外部寫入會引發
curses.error
。嘗試寫入視窗、子視窗或 pad 的右下角會在字串列印後引發異常。一個 ncurses 中的 bug(此 Python 模組的後端)可能在調整視窗大小時導致段錯誤。此問題已在 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)
設定當前游標位置的 num 個字元的屬性,如果提供了
(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)
“派生視窗”的縮寫,
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)
從使用者讀取一個位元組物件,具有基本的行編輯能力。n 的最大值為 2047。
3.14 版中已變更: n 的最大值從 1023 增加到 2047。
- window.getyx()¶
返回當前游標位置相對於視窗左上角的元組
(y, x)
。
- window.hline(ch, n)¶
- window.hline(y, x, ch, n)
在
(y, x)
處顯示一條由字元 ch 組成的長度為 n 的水平線。
- 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,則在移動到 y、x 之後)。
- window.insstr(str[, attr])¶
- window.insstr(y, x, str[, attr])
在游標下方的字元之前插入一個字串(儘可能多地適合該行的字元)。游標右側的所有字元都向右移動,最右側的字元丟失。游標位置不變(如果指定了 y、x,則在移動到 y、x 之後)。
- window.instr([n])¶
- window.instr(y, x[, n])
返回從當前游標位置開始(如果指定了 y、x,則從 y、x 開始)從視窗中提取的位元組物件。屬性從字元中剝離。如果指定了 n,
instr()
返回一個最長為 n 個字元的字串(不包括尾隨的 NUL)。n 的最大值為 2047。3.14 版中已變更: n 的最大值從 1023 增加到 2047。
- window.is_linetouched(line)¶
如果指定的行自上次呼叫
refresh()
以來被修改,則返回True
;否則返回False
。如果 line 對於給定視窗無效,則引發curses.error
異常。
- 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()¶
關閉突出顯示屬性。在某些終端上,這會附帶關閉所有屬性。
- 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)
處顯示一條由字元 ch 和屬性 attr 組成的長度為 n 的垂直線。
常量¶
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 行(反向) |
|
下一頁 |
|
上一頁 |
|
設定製表符 |
|
清除製表符 |
|
清除所有制表符 |
|
回車或傳送(不可靠) |
|
軟(部分)重置(不可靠) |
|
重置或硬重置(不可靠) |
|
列印 |
|
下移或底部(左下) |
|
小鍵盤左上角 |
|
小鍵盤右上角 |
|
小鍵盤中央 |
|
小鍵盤左下角 |
|
小鍵盤右下角 |
|
反向製表符 |
|
開始 |
|
取消 |
|
關閉 |
|
命令 |
|
複製 |
|
建立 |
|
結束 |
|
退出 |
|
查詢 |
|
幫助 |
|
標記 |
|
訊息 |
|
移動 |
|
下一個 |
|
開啟 |
|
選項 |
|
上一個 |
|
重做 |
|
參考 |
|
重新整理 |
|
替換 |
|
重啟 |
|
恢復 |
|
儲存 |
|
Shift + Beg(開始) |
|
Shift + 取消 |
|
Shift + 命令 |
|
Shift + 複製 |
|
Shift + 建立 |
|
Shift + 刪除字元 |
|
Shift + 刪除行 |
|
選擇 |
|
Shift + 結束 |
|
Shift + 清除行 |
|
Shift + 退出 |
|
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 鍵盤可能只有十個功能鍵);此外,以下小鍵盤對映是標準的
鍵帽 |
常量 |
---|---|
插入 |
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 座標。在可能的情況下(包括 xterm 和大多數其他軟體終端模擬器),矩形將使用 VT100/IBM PC 形式字元繪製。否則,它將使用 ASCII 破折號、豎線和加號繪製。
文字框物件¶
你可以按如下方式例項化一個 Textbox
物件
- class curses.textpad.Textbox(win)¶
返回一個文字框小部件物件。_win_ 引數應該是一個 curses window 物件,文字框將包含在該物件中。文字框的編輯游標最初位於包含視窗的左上角,座標為
(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
如果視窗只有一行則終止,否則插入換行符。
Control-K
如果行為空,則刪除該行,否則清空至行尾。
Control-L
重新整理螢幕。
Control-N
游標下移;向下移動一行。
Control-O
在游標位置插入一個空行。
Control-P
游標上移;向上移動一行。
如果游標位於無法移動的邊緣,則移動操作不執行任何操作。以下同義詞在可能的情況下受支援
常量
擊鍵
Control-B
Control-F
Control-P
Control-N
Control-h
所有其他擊鍵都被視為插入給定字元並向右移動(帶行換行)的命令。
- gather()¶
將視窗內容作為字串返回;視窗中的空白是否包含受
stripspaces
成員的影響。
- stripspaces¶
此屬性是一個標誌,控制視窗中空白的解釋。當它開啟時,每行末尾的空白被忽略;任何會導致游標落在末尾空白處的移動都會轉到該行的末尾,並且在收集視窗內容時會去除末尾空白。