Tkinter 之事件绑定
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 | ↑ 按键 |
Tkinter 之事件绑定的更多相关文章
- python tkinter教程-事件绑定
一个Tkinter主要跑在mainloop进程里.Events可能来自多个地方,比如按键,鼠标,或是系统事件. Tkinter提供了丰富的方法来处理这些事件.对于每一个控件Widget,你都可以为其绑 ...
- tkinter学习-事件绑定与窗口
阅读目录: 事件绑定 Toplevel组件 标准对话框 事件绑定: 说明:对于每个组件来说,可以通过bind()方法将函数或方法绑定到具体的事件上. 事件序列: 说明:用户需要使用bind()方法将具 ...
- python tkinter Treeview 事件绑定
def trefun(event): sels= event.widget.selection()#event.widget获取Treeview对象,调用selection获取选择对象名称 for i ...
- tkinter之事件绑定
- python tkinter中的事件绑定
一个Tkinter主要跑在mainloop进程里.Events可能来自多个地方,比如按键,鼠标,或是系统事件. Tkinter提供了丰富的方法来处理这些事件.对于每一个控件Widget,你都可以为其绑 ...
- python之Gui编程事件绑定 2014-4-8
place() 相对定位与绝对定位 相对定位 拖动会发生变化 绝对定位不会from Tkinter import *root = Tk()# Absolute positioningButton(ro ...
- tk(三)按钮的事件绑定
(三)按钮的事件绑定 ==1.普通的Button绑定事件== (1)说明: Button 使用 command=功能函数 来绑定 Button(win, text="确定", co ...
- MVVM设计模式和WPF中的实现(四)事件绑定
MVVM设计模式和在WPF中的实现(四) 事件绑定 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在WPF中 ...
- 7 HTML&JS等前端知识系列之jquery的事件绑定
preface 我们知道,每一个a,input等等标签都可以为其绑定一个事件,onclick也好,focus 也罢,都可以绑定的.但是众神key想过这个问题没有,倘若这里有1000个input标签需要 ...
随机推荐
- python 直角图标生成圆角图标
参考链接:https://stackoverflow.com/questions/11287402/how-to-round-corner-a-logo-without-white-backgroun ...
- webRTC client 源码环境工具配置
以下操作真实实验过,安卓,苹果均可成功 环境 Mac 10.13.6 Xcode 11 翻墙代理:Lantern 专业版 Python 2.7.10 设置 git 代理 #设置git代理 $ git ...
- HTML表格跨行、跨列操作(rowspan、colspan)
转自:https://blog.csdn.net/u012724595/article/details/79401401 一般使用<td>元素的colspan属性来实现单元格跨列操作,使用 ...
- 解决linux下创建用户时出现 Creating mailbox file: 文件已存在
原来linux下添加用户后,会在系统里自动加一个邮箱(系统邮箱),路径是:/var/spool/mail/用户名. 可以直接用命令#rm -rf /var/spool/mail/用户名 ...
- UIP和lwip的区别 转载
uIP是专门为8位和16位控制器设计的一个非常小的TCP/IP栈.完全用C编写,因此可移植到各种不同的结构和操作系统上,一个编译过的栈可以在几KB ROM或几百字节RAM中运行.uIP中还包括一个HT ...
- IAR使用ST-Link下载仿真
修改Debugger->Setup->Driver 选择ST-LINK 修改 ST-LINK ->Interface选择SWD,CPU clock配置单片机CPU系统时钟. 修改De ...
- Pandas进阶笔记 (0)为什么写这个系列
使用Pandas数年之久了,从最早的0.17版本开始接触Pandas,到现在0.25版本,踩过不少坑,面对各种稀奇古怪的bug抓耳挠腮.每每想要解决bug,或者想要实现一个特定的数据操作需求,首先想到 ...
- java AST JCTree简要分析
JCTree简要分析 [toc] JCAnnotatedType 被注解的泛型:(注解的Target为ElementType.TYPE_USE时可注解泛型) public static class A ...
- 使用BERT模型生成token级向量
本文默认读者有一定的Transformer基础,如果没有,请先稍作学习Transormer以及BERT. 相信网上有很多方法可以生成BERT向量,最有代表性的一个就是bert as service,用 ...
- ASP.NET MVC 入门11、使用AJAX
asp.net mvc 支持微软自身Ajax 和 JQuery框架 asp.net mvc View视图可以理解为 一个包含"<%%>"变量引和的模板. Script与 ...