1. 程式人生 > >Pygame詳解(七):key 模組

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

獲取一個按鍵識別符號對應的字串描述。