详解python tkinter教程-事件绑定


Posted in Python onMarch 28, 2019

一个Tkinter主要跑在mainloop进程里。Events可能来自多个地方,比如按键,鼠标,或是系统事件。

Tkinter提供了丰富的方法来处理这些事件。对于每一个控件Widget,你都可以为其绑定方法function。

widget.bind(event,handler)

如果相应的event发生了,就会调用handler处理事件。举个例子:

捕获鼠标点击事件:

from Tkinter import *

root = Tk()
def callback(event):
  print "clicked at", event.x, event.y
frame = Frame(root, width=100, height=100)
frame.bind("<Button-1>", callback)
frame.pack()

root.mainloop()

在这里,我们使用frame的bind方法将一个callback方法绑定到一个事件,也就是点击鼠标左键,每点击一次,控制台打印出当前点击的坐标x,y。

键盘事件被发送到当前拥有焦点的widget,你可以用focus_set方法来设置widget们的焦点:

捕获键盘事件:

from Tkinter import *

root = Tk()

def key(event):
  print "pressed", repr(event.char)

def callback(event):
  print "clicked at", event.x, event.y

frame = Frame(root, width=100, height=100)
frame.bind("<Key>", key)
frame.bind("<Button-1>", callback)
frame.pack()

root.mainloop()

运行这个程序,你会发现,只有在当前窗口获取焦点的情况下,你按键盘键它才会捕获到并打印。

事件

事件用字符串定义,有一个特殊的语法规则:

<modifier-type-detail>

type字段是最重要的,它指出了事件的种类,可以指定为Button,Key或者Enter,Configure等等。modifier和detail字段可以提供一些附加信息,在大多数情况下可以不指定。还有很多方法可以简化事件字符串,比如:为了匹配一个键盘键,你可以省略尖角括号,直接用 键 即可。除非它是空格 , 或本身就是尖括号。

让我们来看看最常用的事件格式:

事件格式:

<Button-1>

一个鼠标点击事件。1代表左键,2代表中键,3代表右键。当你在一个widget上点击鼠标按键,tkinter会自动捕获并触发event,注意,当按键被抬起时才会执行handler。鼠标的位置(相对于widge)x,y会被发往event对象传入handler。你也可以这样:,<1>,它们是等价的。我比较喜欢这种方式。

<B1-Motion>

鼠标拖动事件。1代表按下左键拖动,2代表中键,3代表右键。同样的,鼠标的x,y会以event对象方式被送往handler。

<ButtonRelease-1>

鼠标按下之后释放

<Double-Button-1>

双击鼠标

<Enter>

注意,这里是鼠标指针进入到widget里,并不是代表按下键盘上的Enter键。

<Leave>

和上面的进入对应,鼠标离开widget。

<FocusIn> <FocusOut>

<Return> <Cancel> <BackSpace> <Tab> <Shift_L> <Control_L>
<Alt_L> <Home> <Left> <Up> <Right> <Down> <Delete> <F1> <F2>

这些按键都和键盘上的一一对应。

<Key>

随便一个按键,键值会以char的格式放入event对象。

a b c ... 1 2 ...

对应键盘上的按键

<Configure>

这个关键了,如果widget的大小改变了,或者是位置,新的大小(width和height)会打包到event发往handler。

事件对象

事件对象是独立的python实例,有很多属性。

对象属性:

  1. widget  产生event的实例,不是名字,所有对象拥有
  2. x,y     鼠标位置,单位:像素
  3. x_root,y_root       鼠标相对于屏幕左上角的位置,像素
  4. char        仅键盘事件,string
  5. num     按钮num,仅鼠标事件
  6. width,height        widget新大小
  7. type        事件类型

 实例绑定和类绑定

上面我们用的绑定方法是绑定到一个实例对象上,这就意味着,如果新建一个实例,它是没有绑定事件的。
实际上,tkinter允许你将事件绑定到类上,甚至是绑定到程序本身。你可以创建四个层面的绑定:

  1. 绑定到widget instance 使用bind方法
  2. 绑定到widget的toplevel windows,顶层窗口,也是用bind
  3. 绑定到widget class,使用bind_class

比如,你可以使用bind_all来创建一个F1键的绑定,这样你可以在任何地方打开帮助。

以上所述是小编给大家介绍的python tkinter事件绑定详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
详解详解Python中writelines()方法的使用
May 25 Python
浅谈python中的面向对象和类的基本语法
Jun 13 Python
Python 2与Python 3版本和编码的对比
Feb 14 Python
Python使用pandas对数据进行差分运算的方法
Dec 22 Python
通过pykafka接收Kafka消息队列的方法
Dec 27 Python
详解Python下载图片并保存本地的两种方式
May 15 Python
使用Python实现跳一跳自动跳跃功能
Jul 10 Python
python中wx模块的具体使用方法
May 15 Python
python3读取autocad图形文件.py实例
Jun 05 Python
Tensorflow中批量读取数据的案列分析及TFRecord文件的打包与读取
Jun 30 Python
python装饰器代码深入讲解
Mar 01 Python
Python多个MP4合成视频的实现方法
Jul 16 Python
Python中捕获键盘的方式详解
Mar 28 #Python
python sort、sort_index方法代码实例
Mar 28 #Python
详解python selenium 爬取网易云音乐歌单名
Mar 28 #Python
pyqt5利用pyqtDesigner实现登录界面
Mar 28 #Python
Django实现单用户登录的方法示例
Mar 28 #Python
pyqt5实现登录界面的模板
May 30 #Python
python实现AES加密和解密
Mar 27 #Python
You might like
PHP全功能无变形图片裁剪操作类与用法示例
2017/01/10 PHP
PHP ADODB实现事务处理功能示例
2018/05/25 PHP
Django中通过定时任务触发页面静态化的处理方式
2018/08/29 PHP
Thinkphp5.0框架的Db操作实例分析【连接、增删改查、链式操作等】
2019/10/11 PHP
AJAX 网页保留浏览器前进后退等功能
2011/02/12 Javascript
js 得到文件后缀(通过正则实现)
2013/07/08 Javascript
JS模拟自动点击的简单实例
2013/08/08 Javascript
jquery实现倒计时效果
2015/12/14 Javascript
jQuery插件实现带圆点的焦点图片轮播切换
2016/01/18 Javascript
利用n工具轻松管理Node.js的版本
2017/04/21 Javascript
AngularJS  ng-repeat遍历输出的用法
2017/06/19 Javascript
Node.js中的child_process模块详解
2018/06/08 Javascript
详解bootstrap-fileinput文件上传控件的亲身实践
2019/03/21 Javascript
jQuery实现带3D切割效果的轮播图功能示例【附源码下载】
2019/04/04 jQuery
javascript canvas封装动态时钟
2020/09/30 Javascript
微信小程序开发数据缓存基础知识辨析及运用实例详解
2020/11/06 Javascript
[01:02]2014 DOTA2国际邀请赛中国区预选赛 现场抢先看
2014/05/22 DOTA
python使用xauth方式登录饭否网然后发消息
2014/04/11 Python
Python实现的Google IP 可用性检测脚本
2015/04/23 Python
解决pandas使用read_csv()读取文件遇到的问题
2018/06/15 Python
Python使用Selenium模块模拟浏览器抓取斗鱼直播间信息示例
2018/07/18 Python
Python文件读写保存操作的示例代码
2018/09/14 Python
python 多个参数不为空校验方法
2019/02/14 Python
Python 3.8新特征之asyncio REPL
2019/05/28 Python
打包python 加icon 去掉cmd黑窗口方法
2019/06/24 Python
基于Keras 循环训练模型跑数据时内存泄漏的解决方式
2020/06/11 Python
浅析移动设备HTML5页面布局
2015/12/01 HTML / CSS
迪拜领先运动补剂零售品牌中文站:Sporter商城
2019/08/20 全球购物
PHP面试题及答案二
2015/05/23 面试题
是否有自动比较结构的方法
2015/06/03 面试题
Linux内核产生并发的原因
2012/07/13 面试题
国际政治个人自荐信范文
2013/11/26 职场文书
人力资源部副职的竞聘演讲稿
2014/01/07 职场文书
葛优非诚勿扰搞笑征婚台词
2014/03/17 职场文书
2015年物业公司保洁工作总结
2015/10/22 职场文书
Nebula Graph解决风控业务实践
2022/03/31 MySQL