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(制表)按键 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理