import tkinter as tk
window = tk.Tk()
# 設置窗口大小
winWidth = 600
winHeight = 400
# 獲取屏幕分辨率
screenWidth = window.winfo_screenwidth()
screenHeight = window.winfo_screenheight()
x = int((screenWidth - winWidth) / 2)
y = int((screenHeight - winHeight) / 2)
# 設置主窗口標題
window.title("綁定事件參數說明")
# 設置窗口初始位置在屏幕居中
window.geometry("%sx%s+%s+%s" % (winWidth, winHeight, x, y))
# 設置窗口圖標
window.iconbitmap("./image/icon.ico")
# 設置窗口寬高固定
window.resizable(0, 0)
def callBack(event):
print("button is click")
btn = tk.Button(window, text="點擊")
btn.bind("<Button-1>", callBack)
btn.pack()
def windowBack(event):
print(event.char)
window.bind("<Key>", windowBack)
window.mainloop()
一、事件序列
事件序列是以字符串的形式表示的,可以表示一個或多個相關聯的事件。
事件序列使用以下語法描述:
<modifier-type-detail>
-
- 事件序列是包含在尖括號(<...>)中
- type 部分的內容是最重要的,它通常用於描述普通的事件類型,例如鼠標點擊或鍵盤按鍵點擊(詳見下方)。
- modifier 部分的內容是可選的,它通常用於描述組合鍵,例如 Ctrl + c,Shift + 鼠標左鍵點擊(詳見下方)。
- detail 部分的內容是可選的,它通常用於描述具體的按鍵,例如 Button-1 表示鼠標左鍵。
| 事件序列 | 含義 | 序列 |
|---|---|---|
| <Button-1> | 用戶點擊鼠標左鍵 | detail |
| <KeyPress-H> | 用戶點擊 H 按鍵 | |
| <Control-Shift-KeyPress-H> | 用戶同時點擊 Ctrl + Shift + H |
二、type
| Activate | 當組件的狀態從“未激活”變為“激活”的時候觸發該事件 |
| Button | 1. 當用戶點擊鼠標按鍵的時候觸發該事件 2. detail 部分指定具體哪個按鍵:<Button-1>鼠標左鍵,<Button-2>鼠標中鍵,<Button-3>鼠標右鍵,<Button-4>滾輪上滾(Linux),<Button-5>滾輪下滾(Linux) |
| ButtonRelease | 1. 當用戶釋放鼠標按鍵的時候觸發該事 2. 在大多數情況下,比 Button 要更好用,因為如果當用戶不小心按下鼠標,用戶可以將鼠標移出組件再釋放鼠標,從而避免不小心觸發事件 |
| Configure | 當組件的尺寸發生改變的時候觸發該事件 |
| Deactivate | 當組件的狀態從“激活”變為“未激活”的時候觸發該事件 |
| Destroy | 當組件被銷毀的時候觸發該事件 |
| Enter | 1. 當鼠標指針進入組件的時候觸發該事件 2. 注意:不是指用戶按下回車鍵 |
| Expose | 當窗口或組件的某部分不再被覆蓋的時候觸發該事件 |
| FocusIn | 1. 當組件獲得焦點的時候觸發該事件 2. 用戶可以用 Tab 鍵將焦點轉移到該組件上(需要該組件的 takefocus 選項為 True) 3. 你也可以調用 focus_set() 方法使該組件獲得焦點 |
| FocusOut | 當組件失去焦點的時候觸發該事件 |
| KeyPress | 1. 當用戶按下鍵盤按鍵的時候觸發該事件 2. detail 可以指定具體的按鍵,例如 <KeyPress-H>表示當大寫字母 H 被按下的時候觸發該事件 3. KeyPress 可以簡寫為 Key |
| KeyRelease | 當用戶釋放鍵盤按鍵的時候觸發該事件 |
| Leave | 當鼠標指針離開組件的時候觸發該事件 |
| Map | 1. 當組件被映射的時候觸發該事件 2. 意思是在應用程序中顯示該組件的時候,例如調用 grid() 方法 |
| Motion | 當鼠標在組件內移動的整個過程均觸發該事件 |
| MouseWheel | 1. 當鼠標滾輪滾動的時候觸發該事件 2. 目前該事件僅支持 Windows 和 Mac 系統,Linux 系統請參考 Button |
| Unmap | 1. 當組件被取消映射的時候觸發該事件 2. 意思是在應用程序中不再顯示該組件的時候,例如調用 grid_remove() 方法 |
| Visibility | 當應用程序至少有一部分在屏幕中是可見的時候觸發該事件 |
三、modifier
| Alt | 當按下 Alt 按鍵的時候 |
| Any | 1. 表示任何類型的按鍵被按下的時候 2. 例如 <Any-KeyPress> 表示當用戶按下任何按鍵時觸發事件 |
| Control | 當按下 Ctrl 按鍵的時候 |
| Double | 1. 當后續兩個事件被連續觸發的時候 2. 例如 <Double-Button-1> 表示當用戶雙擊鼠標左鍵時觸發事件 |
| Lock | 當打開大寫字母鎖定鍵(CapsLock)的時候 |
| Shift | 當按下 Shift 按鍵的時候 |
| Triple | 跟 Double 類似,當后續三個事件被連續觸發的時候 |
四、Event 對象
| widget | 產生該事件的組件 |
| x, y | 當前的鼠標位置坐標(相對於窗口左上角,像素為單位) |
| x_root, y_root | 當前的鼠標位置坐標(相對於屏幕左上角,像素為單位) |
| keysym | 按鍵名,見下方 Key names(鍵盤事件專屬) |
| keycode | 按鍵碼,見下方 Key names(鍵盤事件專屬) |
| num | 按鈕數字(鼠標事件專屬) |
| width, height | 組件的新尺寸(Configure 事件專屬) |
| type | 該事件類型 |
五、Key names
| 按鍵名(keysym) | 按鍵碼(keycode) | 代表的按鍵 |
|---|---|---|
| Alt_L | 64 | 左邊的 Alt 按鍵 |
| Alt_R | 113 | 右邊的 Alt 按鍵 |
| BackSpace | 22 | Backspace(退格)按鍵 |
| Cancel | 110 | break 按鍵 |
| Caps_Lock | 66 | CapsLock(大寫字母鎖定)按鍵 |
| Control_L | 37 | 左邊的 Ctrl 按鍵 |
| Control_R | 109 | 右邊的 Ctrl 按鍵 |
| Delete | 107 | Delete 按鍵 |
| Down | 104 | ↓ 按鍵 |
| End | 103 | End 按鍵 |
| Escape | 9 | Esc 按鍵 |
| Execute | 111 | SysReq 按鍵 |
| F1 | 67 | F1 按鍵 |
| F2 | 68 | F2 按鍵 |
| F3 | 69 | F3 按鍵 |
| F4 | 70 | F4 按鍵 |
| F5 | 71 | F5 按鍵 |
| F6 | 72 | F6 按鍵 |
| F7 | 73 | F7 按鍵 |
| F8 | 74 | F8 按鍵 |
| F9 | 75 | F9 按鍵 |
| F10 | 76 | F10 按鍵 |
| F11 | 77 | F11 按鍵 |
| F12 | 96 | F12 按鍵 |
| Home | 97 | Home 按鍵 |
| Insert | 106 | Insert 按鍵 |
| Left | 100 | ← 按鍵 |
| Linefeed | 54 | Linefeed(Ctrl + J) |
| KP_0 | 90 | 小鍵盤數字 0 |
| KP_1 | 87 | 小鍵盤數字 1 |
| KP_2 | 88 | 小鍵盤數字 2 |
| KP_3 | 89 | 小鍵盤數字 3 |
| KP_4 | 83 | 小鍵盤數字 4 |
| KP_5 | 84 | 小鍵盤數字 5 |
| KP_6 | 85 | 小鍵盤數字 6 |
| KP_7 | 79 | 小鍵盤數字 7 |
| KP_8 | 80 | 小鍵盤數字 8 |
| KP_9 | 81 | 小鍵盤數字 9 |
| KP_Add | 86 | 小鍵盤的 + 按鍵 |
| KP_Begin | 84 | 小鍵盤的中間按鍵(5) |
| KP_Decimal | 91 | 小鍵盤的點按鍵(.) |
| KP_Delete | 91 | 小鍵盤的刪除鍵 |
| KP_Divide | 112 | 小鍵盤的 / 按鍵 |
| KP_Down | 88 | 小鍵盤的 ↓ 按鍵 |
| KP_End | 87 | 小鍵盤的 End 按鍵 |
| KP_Enter | 108 | 小鍵盤的 Enter 按鍵 |
| KP_Home | 79 | 小鍵盤的 Home 按鍵 |
| KP_Insert | 90 | 小鍵盤的 Insert 按鍵 |
| KP_Left | 83 | 小鍵盤的 ← 按鍵 |
| KP_Multiply | 63 | 小鍵盤的 * 按鍵 |
| KP_Next | 89 | 小鍵盤的 PageDown 按鍵 |
| KP_Prior | 81 | 小鍵盤的 PageUp 按鍵 |
| KP_Right | 85 | 小鍵盤的 → 按鍵 |
| KP_Subtract | 82 | 小鍵盤的 - 按鍵 |
| KP_Up | 80 | 小鍵盤的 ↑ 按鍵 |
| Next | 105 | PageDown 按鍵 |
| Num_Lock | 77 | NumLock(數字鎖定)按鍵 |
| Pause | 110 | Pause(暫停)按鍵 |
| 111 | PrintScrn(打印屏幕)按鍵 | |
| Prior | 99 | PageUp 按鍵 |
| Return | 36 | Enter(回車)按鍵 |
| Right | 102 | → 按鍵 |
| Scroll_Lock | 78 | ScrollLock 按鍵 |
| Shift_L | 50 | 左邊的 Shift 按鍵 |
| Shift_R | 62 | 右邊的 Shift 按鍵 |
| Tab | 23 | Tab(制表)按鍵 |
| Up | 98 | ↑ 按鍵 |
