Pygame詳解(七):key 模組
pygame.key
與鍵盤相關的 Pygame 模組。
函式
- pygame.key.get_focused() — 當視窗獲得鍵盤的輸入焦點時返回 True
- pygame.key.get_pressed() — 獲取鍵盤上所有按鍵的狀態
- pygame.key.get_mods() — 檢測是否有組合鍵被按下
- pygame.key.set_mods() — 臨時設定某些組合鍵為被按下狀態
- pygame.key.set_repeat() — 控制重複響應持續按下按鍵的時間
- pygame.key.get_repeat() — 獲取重複響應按鍵的引數
- pygame.key.name() — 獲取按鍵識別符號對應的名字
該模組包含處理與鍵盤操作相關的函式。當鍵盤按鍵被按下和釋放時,事件佇列將獲得 pygame.KEYDOWN 和 pygame.KEYUP 事件訊息。這兩個訊息均包含 key 屬性,是一個整數的 id,代表鍵盤上具體的某個按鍵。
pygame.KYEDOWN 事件還有個額外的屬性 unicode 和 scancode。unicode 代表一個按鍵翻譯後的 Unicode 編碼,這包含 shift 按鍵和組合鍵。scancode 是掃描碼,不同鍵盤間該值可能不同。不過這對於特殊按鍵像多媒體鍵的選擇是有用的。
溫馨提示:當鍵盤按下的時候,鍵盤會發送一個掃描碼給系統。掃描碼是鍵盤反饋哪一個按鍵被按下的方式,不同型別的鍵盤掃描碼不同。再由系統呼叫相應的函式將其轉換為統一的 Unicode 編碼。
key 屬性的值是一個數字,為了方便使用,Pygame 將這些數字定義為以下這些常量:
KeyASCII |
ASCII |
描述 |
K_BACKSPACE | \b | 退格鍵(Backspace) |
K_TAB | \t | 製表鍵(Tab) |
K_CLEAR | 清楚鍵(Clear) | |
K_RETURN | \r | 回車鍵(Enter) |
K_PAUSE | 暫停鍵(Pause) | |
K_ESCAPE | ^[ | 退出鍵(Escape) |
K_SPACE | 空格鍵(Space) | |
K_EXCLAIM | ! | 感嘆號(exclaim) |
K_QUOTEDBL | " | 雙引號(quotedbl) |
K_HASH | # | 井號(hash) |
K_DOLLAR | $ | 美元符號(dollar) |
K_AMPERSAND | & | and 符號(ampersand) |
K_QUOTE | ' | 單引號(quote) |
K_LEFTPAREN | ( | 左小括號(left parenthesis) |
K_RIGHTPAREN | ) | 右小括號(right parenthesis) |
K_ASTERISK | * | 星號(asterisk) |
K_PLUS | + | 加號(plus sign) |
K_COMMA | , | 逗號(comma) |
K_MINUS | - | 減號(minus sign) |
K_PERIOD | . | 句號(period) |
K_SLASH | / | 正斜槓(forward slash) |
K_0 | 0 | 0 |
K_1 | 1 | 1 |
K_2 | 2 | 2 |
K_3 | 3 | 3 |
K_4 | 4 | 4 |
K_5 | 5 | 5 |
K_6 | 6 | 6 |
K_7 | 7 | 7 |
K_8 | 8 | 8 |
K_9 | 9 | 9 |
K_COLON | : | 冒號(colon) |
K_SEMICOLON | ; | 分號(semicolon) |
K_LESS | < | 小於號(less-than sign) |
K_EQUALS | = | 等於號(equals sign) |
K_GREATER | > | 大於號(greater-than sign) |
K_QUESTION | ? | 問號(question mark) |
K_AT | @ | at 符號(at) |
K_LEFTBRACKET | [ | 左中括號(left bracket) |
K_BACKSLASH | \ | 反斜槓(backslash) |
K_RIGHTBRACKET | ] | 右中括號(right bracket) |
K_CARET | ^ | 脫字元(caret) |
K_UNDERSCORE | _ | 下劃線(underscore) |
K_BACKQUOTE | ` | 重音符(grave) |
K_a | a | a |
K_b | b | b |
K_c | c | c |
K_d | d | d |
K_e | e | e |
K_f | f | f |
K_g | g | g |
K_h | h | h |
K_i | i | i |
K_j | j | j |
K_k | k | k |
K_l | l | l |
K_m | m | m |
K_n | n | n |
K_o | o | o |
K_p | p | p |
K_q | q | q |
K_r | r | r |
K_s | s | s |
K_t | t | t |
K_u | u | u |
K_v | v | v |
K_w | w | w |
K_x | x | x |
K_y | y | y |
K_z | z | z |
K_DELETE | 刪除鍵(delete) | |
K_KP0 | 0(小鍵盤) | |
K_KP1 | 1(小鍵盤) | |
K_KP2 | 2(小鍵盤) | |
K_KP3 | 3(小鍵盤) | |
K_KP4 | 4(小鍵盤) | |
K_KP5 | 5(小鍵盤) | |
K_KP6 | 6(小鍵盤) | |
K_KP7 | 7(小鍵盤) | |
K_KP8 | 8(小鍵盤) | |
K_KP9 | 9(小鍵盤) | |
K_KP_PERIOD | . | 句號(小鍵盤) |
K_KP_DIVIDE | / | 除號(小鍵盤) |
K_KP_MULTIPLY | * | 乘號(小鍵盤) |
K_KP_MINUS | - | 減號(小鍵盤) |
K_KP_PLUS | + | 加號(小鍵盤) |
K_KP_ENTER | \r | 回車鍵(小鍵盤) |
K_KP_EQUALS | = | 等於號(小鍵盤) |
K_UP | 向上箭頭(up arrow) | |
K_DOWN | 向下箭頭(down arrow) | |
K_RIGHT | 向右箭頭(right arrow) | |
K_LEFT | 向左箭頭(left arrow) | |
K_INSERT | 插入符(insert) | |
K_HOME | Home 鍵(home) | |
K_END | End 鍵(end) | |
K_PAGEUP | 上一頁(page up) | |
K_PAGEDOWN | 下一頁(page down) | |
K_F1 | F1 | |
K_F2 | F2 | |
K_F3 | F3 | |
K_F4 | F4 | |
K_F5 | F5 | |
K_F6 | F6 | |
K_F7 | F7 | |
K_F8 | F8 | |
K_F9 | F9 | |
K_F10 | F10 | |
K_F11 | F11 | |
K_F12 | F12 | |
K_F13 | F13 | |
K_F14 | F14 | |
K_F15 | F15 | |
K_NUMLOCK | 數字鍵盤鎖定鍵(numlock) | |
K_CAPSLOCK | 大寫字母鎖定鍵(capslock) | |
K_SCROLLOCK | 滾動鎖定鍵(scrollock) | |
K_RSHIFT | 右邊的 shift 鍵(right shift) | |
K_LSHIFT | 左邊的 shift 鍵(left shift) | |
K_RCTRL | 右邊的 ctrl 鍵(right ctrl) | |
K_LCTRL | 左邊的 ctrl 鍵(left ctrl) | |
K_RALT | 右邊的 alt 鍵(right alt) | |
K_LALT | 左邊的 alt 鍵(left alt) | |
K_RMETA | 右邊的元鍵(right meta) | |
K_LMETA | 左邊的元鍵(left meta) | |
K_LSUPER | 左邊的 Window 鍵(left windows key) | |
K_RSUPER | 右邊的 Window 鍵(right windows key) | |
K_MODE | 模式轉換鍵(mode shift) | |
K_HELP | 幫助鍵(help) | |
K_PRINT | 列印螢幕鍵(print screen) | |
K_SYSREQ | 魔術鍵(sysrq) | |
K_BREAK | 中斷鍵(break) | |
K_MENU | 選單鍵(menu) | |
K_POWER | 電源鍵(power) | |
K_EURO | 歐元符號(euro) |
還有一個 mod 屬性,用於描述組合鍵狀態。
以下是組合鍵的常量定義:
KeyASCII |
描述 |
KMOD_NONE | 木有同時按下組合鍵 |
KMOD_LSHIFT | 同時按下左邊的 shift 鍵 |
KMOD_RSHIFT | 同時按下右邊的 shift 鍵 |
KMOD_SHIFT | 同時按下 shift 鍵 |
KMOD_CAPS | 同時按下大寫字母鎖定鍵 |
KMOD_LCTRL | 同時按下左邊的 ctrl 鍵 |
KMOD_RCTRL | 同時按下右邊的 ctrl 鍵 |
KMOD_CTRL | 同時按下 ctrl 鍵 |
KMOD_LALT | 同時按下左邊的 alt 鍵 |
KMOD_RALT | 同時按下右邊的 alt 鍵 |
KMOD_ALT | 同時按下 alt 鍵 |
KMOD_LMETA | 同時按下左邊的元鍵 |
KMOD_RMETA | 同時按下右邊的元鍵 |
KMOD_META | 同時按下元鍵 |
KMOD_NUM | 同時按下數字鍵盤鎖定鍵 |
KMOD_MODE | 同時按下模式轉換鍵 |
溫馨提示:如果 mod & KMOD_CTRL 是真的話,表示使用者同時按下了 Ctrl 鍵。
函式詳解
pygame.key.get_focused()
當視窗獲得鍵盤的輸入焦點時返回 True。
get_focused() -> bool
當視窗獲得鍵盤的輸入焦點時返回 True,如果視窗需要確保不失去鍵盤焦點,可以使用 pygame.event.set_grab(True) 獨佔所有的輸入介面。
溫馨提示:注意,這樣做你就無法將滑鼠移出視窗客戶區了,但你仍然可以通過 Ctrl - Alt - Delete 熱鍵“解圍”。
pygame.key.get_pressed()
獲取鍵盤上所有按鍵的狀態。
get_pressed() -> bools
返回一個由布林型別值組成的序列,表示鍵盤上所有按鍵的當前狀態。使用 key 常量作為索引,如果該元素是 True,表示該按鍵被按下。
使用該函式獲取一系列按鈕被按下的狀態,並不能正確的獲取使用者輸入的文字。因為你無法知道使用者按鍵的被按下的順序,並且快速的連續按下鍵盤可能無法完全被捕獲(在兩次呼叫 pygame.key.get_pressed() 的過程中被忽略),也無法將這些按下的按鍵完全轉化為字元值。實現此功能可以通過捕獲 pygame.KEYDOWN 事件訊息來實現。
pygame.key.get_mods()
檢測是否有組合鍵被按下。
get_mods() -> int
返回一個包含所有組合鍵位掩碼的整數。使用位操作符 & 你可以檢測某個組合鍵是否被按下。
溫馨提示:假如 pygame.key.get_mods() 返回值存放在 mods 變數中,如果 mods & KMOD_CTRL 為 True,表示 ctrl 鍵正被按下。
pygame.key.set_mods()
臨時設定某些組合鍵為被按下狀態。
set_mods(int) -> None
建立一個位掩碼整數,包含你需要設定為被按下狀態的組合鍵。
溫馨提示:比如我們需要設定 ctrl 和 alt 組合鍵為按下狀態,則可以 mods = KMOD_CTRL | KMOD_ALT,然後呼叫 pygame.key.set_mods(mods),這樣儘管使用者沒有按下 ctrl 和 alt 組合鍵,它們依然是顯示被按下狀態。
pygame.key.set_repeat()
控制重複響應持續按下按鍵的時間。
set_repeat() -> None
set_repeat(delay, interval) -> None
當開啟重複響應按鍵,那麼使用者持續按下某一按鍵,就會不斷產生同一 pygame.KEYDOWN 事件。delay 引數設定多久後(單位是毫秒)開始傳送第一個 pygame.KEYDOWN 事件。interval 引數設定傳送兩個事件之間的間隔。如果不傳入任何引數,表示取消重複響應按鍵。
pygame.key.get_repeat()
獲取重複響應按鍵的引數。
get_repeat() -> (delay, interval)
當開啟重複響應按鍵,那麼使用者持續按下某一按鍵,就會不斷產生同一 pygame.KEYDOWN 事件。返回值是一個二元組,第一個元素 delay 表示多久後(單位是毫秒)開始傳送第一個 pygame.KEYDOWN 事件。第二個元素 interval 表示傳送兩個事件之間的間隔。
預設情況下重複響應按鍵是沒有開啟的。
Pygame 1.8 新增加的。
pygame.key.name()
獲取按鍵識別符號對應的名字。
name(key) -> string
獲取一個按鍵識別符號對應的字串描述。