13_组件 事件绑定
1,基础概要
事件来源:鼠标和键盘操作,窗口管理器触发的重绘事件
通过 bind() 方法将函数或方法绑定到具体的事件上。
当被触发的事件满足该组件绑定的事件时,Tkinter 就会带着事件对象(Event)去调用 handler() 方法。
import tkinter as tk
window = tk.Tk()
window.title('hello thinter')
height = window.winfo_screenheight()
width = window.winfo_screenwidth()
window.geometry('600x400+%d+%d' % ((width - 600) / 2, (height - 400) / 2))
# 鼠标点击位置
def mouseclick(event):
print("点击:", event.x, event.y)
frame1 = tk.Frame(window, width=100, height=100, bd=1, relief='sunken')
frame1.bind("<Button-1>", mouseclick)
frame1.place(x=200, y=0)
# 键盘按键,似乎可以打字
def keyboard(event):
print("按键:", event.char)
frame2 = tk.Frame(window, width=100, height=100, bd=1, relief='sunken')
frame2.bind("<Key>", keyboard)
frame2.focus_set()
frame2.place(x=300, y=0)
# 鼠标移动坐标
def moveline(event):
print("坐标:", event.x, event.y)
frame3 = tk.Frame(window, width=200, height=200, bd=1, relief='sunken')
frame3.bind("<Motion>", moveline)
frame3.place(x=200, y=100)
window.mainloop()
2,详细解释
事件序列
Tkinter 使用一种称为"事件序列的机制"来定义事件,使用 bind() 方法将事件序列与自定义的方法绑定。
事件序列是以字符串的形式表示的,可以表示一个或多个相关联的事件(如果是多个事件,那么对应的方法只有在满足所有事件的前提下才会被调用)。
事件序列语法:<modifier-type-detail>
事件序列是包含在尖括号(<...>)中
type:'必填内容'、通常用于描述普通的事件类型,例如 鼠标点击或键盘按键点击
modifier:可选内容、通常用于描述组合键,例如 Ctrl + c,Shift + 鼠标左键点击
detail:可选内容、它通常用于描述具体的按键,例如 Button-1 表示鼠标左键
例:事件序列 含义
<Button-1> 点击鼠标左键
<KeyPress-H> 按 H 按键
<Control-Shift-KeyPress-H> 组合键 Ctrl + Shift + H
type
| type | 含义 |
|---|---|
| KeyPress | 1,当按下键盘按键的时候触发该事件 2,指定具体按键,例 3,KeyPress可以简写为Key, |
| KeyRelease | 用户释放键盘按键的时候触发该事件 |
| Button | 按下鼠按键时触发该事件 |
| ButtonRelease | 释放鼠标键时触发该事件 某些情况下,比Button好用,误按下鼠标,可移动至组件外释放,避免触发事件 |
| Motion | 鼠标在组件内移动的个过程均触发该事件 |
| Enter | 当鼠标指针进入组件的时候触发该事件 注意:不是指用户按下"回车键" |
| Leave | 当鼠指针离开组件的时候触发该事件 |
| Focusin | 1,当组件获得焦点的时候触发该事件 2,用户可以用Tab键将焦点转移到该组件上(组件的 takefocus=True) 3,你也可以调用 focus_set() 方法使该组件得焦点 |
| FocusOut | 当组件失去焦点的时候触发该事件 |
| Configure | 当组件尺寸发生改变时触发该事件 |
| Destroy | 当组件被销毁时触发该事件 |
| MouseWheel | 当鼠标滚轮滚动的时候触发该事件 该事件仅支持Windows和Mac,Linux请参考Button |
| Activate | 当组件的状态从“未激活"变为"激活"的时候触发该事件 |
| Deactivate | 当组件的状态从“激活"变为"未激活"的时候触发该事件 |
| Expose | 当窗口或组件的某部分不再被覆盖的时候触发该事件 |
| Map | 当组件被映射的时候触发该事件 意思是在应用程序中显示该组件的时候,例如调用 grid()方法 |
| Unmap | 当组件被取消映射的时候触发该事件 意思是在应用程序中不再显该组件的时候,例调用 grid_remove() 方法 |
| Visibility | 当应用程序至少有一部分在屏幕中是可见的时候触发该事件 |
modifier
| modifier | 含义 |
|---|---|
| Control | 当按下 Ctrl 按键的时候 |
| Shift | 当按下 Shift 按键的时候 |
| Alt | 当按下 Alt 按键的时候 |
| Any | 1,表示任何类型的按键被按下的时候 2,例 |
| Lock | 当打开大写字母锁定键 CapsLock 的时候 |
| Double | 1,当后续两个事件被连续触发的时候 2,例 |
| Triple | 跟Double类似,当后续三个事件被连续触发的时候 |
Event对象
| 属性 | 含义 |
|---|---|
| type | 该事件类型 |
| widget | 产生该事件的组件 |
| x,y | 当前的鼠标位置坐标(相对于窗口左上角,像素为单位) |
| x_root,y_root | 当前的鼠标位置坐标(相对于屏幕左上角,像素为单位) |
| char | 按键对应的字符(键盘事件专属) |
| ksysym | 按键名,见下方Keynames(键盘事件专属) |
| keycode | 按键码,见下方Keynames(键盘事件专属) |
| num | 按钮数字(鼠标事件专属) |
| width,height | 组件的新尺寸(Configure事件专属) |
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按键 |
| Up | 98 | ↑ |
| Down | 104 | ↓ |
| Left | 100 | ← |
| Right | 102 | → |
| 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按键 |
| 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_End | 87 | 小键盘的End按键 |
| KP_Enter | 108 | 小键盘的Enter按键 |
| KP_Home | 79 | 小键盘的Home按键 |
| KP_Insert | 90 | 小键盘的Insert按键 |
| KP_Multiply | 63 | 小键盘的*按键 |
| KP_Next | 89 | 小键盘的PageDown按键 |
| KP_Prior | 81 | 小键盘的PageUp按键 |
| KP_Subtract | 82 | 小键盘的-按键 |
| KP_Up | 80 | 小键盘的 ↑ |
| KP_Down | 88 | 小键盘的 ↓ |
| KP_Left | 83 | 小键盘的 ← |
| KP_Right | 85 | 小键盘的 → |
| Next | 105 | PageDown按键 |
| Num_Lock | 77 | NumLock(数字锁定)按键 |
| Pause | 110 | Pause(暂停)按键 |
| 111 | PrintScrn(打印屏幕)按键 | |
| Prior | 99 | PageUp按键 |
| Return | 36 | Enter(回车)按键 |
| Scroll_Lock | 78 | ScrollLock按键 |
| Shift_L | 50 | 左边的Shift按键 |
| Shift_R | 62 | 右边的Shift按键 |
| Tab | 23 | Tab(制表)按键 |

浙公网安备 33010602011771号