详解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实用日期时间处理方法汇总
May 09 Python
Python图片裁剪实例代码(如头像裁剪)
Jun 21 Python
Python编程之Re模块下的函数介绍
Oct 28 Python
为什么选择python编程语言入门黑客攻防 给你几个理由!
Feb 02 Python
python 构造三维全零数组的方法
Nov 12 Python
啥是佩奇?使用Python自动绘画小猪佩奇的代码实例
Feb 20 Python
python @classmethod 的使用场合详解
Aug 23 Python
Python中的四种交换数值的方法解析
Nov 18 Python
Django实现列表页商品数据返回教程
Apr 03 Python
解决python调用自己文件函数/执行函数找不到包问题
Jun 01 Python
python pandas dataframe 去重函数的具体使用
Jul 20 Python
MATLAB 全景图切割及盒图显示的实现步骤
May 14 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
推荐几部必看的DC动画电影
2020/03/03 欧美动漫
用php来检测proxy
2006/10/09 PHP
PHP和XSS跨站攻击的防范
2007/04/17 PHP
简单的PHP图片上传程序
2008/03/27 PHP
Laravel 5.3 学习笔记之 安装
2016/08/28 PHP
javascript 数组排序函数
2009/08/20 Javascript
struts2+jquery+json实现异步加载数据(自写)
2013/06/24 Javascript
jquery使用jxl插件导出excel示例
2014/04/14 Javascript
jQuery中:checkbox选择器用法实例
2015/01/03 Javascript
超简单的Vue.js环境搭建教程
2017/03/17 Javascript
vue中axios处理http发送请求的示例(Post和get)
2017/10/13 Javascript
JavaScript重复元素处理方法分析【统计个数、计算、去重复等】
2017/12/14 Javascript
使用 Node.js 开发资讯爬虫流程
2018/01/07 Javascript
AJAX在JQuery中的应用详解
2019/01/30 jQuery
详解用JS添加和删除class类名
2019/03/25 Javascript
vue+iview使用树形控件的具体使用
2020/11/02 Javascript
JavaScript对象访问器Getter及Setter原理解析
2020/12/08 Javascript
Python入门篇之函数
2014/10/20 Python
Python实现快速排序和插入排序算法及自定义排序的示例
2016/02/16 Python
基于Python 的进程管理工具supervisor使用指南
2016/09/18 Python
Python设计模式之策略模式实例详解
2019/01/21 Python
利用ctypes获取numpy数组的指针方法
2019/02/12 Python
python将excel转换为csv的代码方法总结
2019/07/03 Python
python高斯分布概率密度函数的使用详解
2019/07/10 Python
python装饰器的特性原理详解
2019/12/25 Python
Python使用sqlite3模块内置数据库
2020/05/07 Python
全球最大的房车租赁市场:Outdoorsy
2018/09/19 全球购物
Java面试中常遇到的问题,也是需要注意的几点
2013/08/30 面试题
住房公积金接收函
2014/01/09 职场文书
黄河象教学反思
2014/02/10 职场文书
关于爱国的标语
2014/06/24 职场文书
放飞理想演讲稿
2014/09/09 职场文书
2014学习优秀共产党员先进事迹材料思想汇报
2014/09/14 职场文书
法人代表身份证明书及授权委托书
2014/09/16 职场文书
导游词之云南省玉龙雪山
2019/12/19 职场文书
python如何利用traceback获取详细的异常信息
2021/06/05 Python