事件类型
用户通过鼠标、键盘、游戏控制设备在与图形界面交互时,就会触发事件。tkinter事件通常采用了将事件名称放置于尖括号内的字符串表示,尖括号中的内容我们称之为事件类型。事件类型有其通用的定义方式。如下

<[modifier-]…type[-detail]>

其中方括号内的内容为可选参数

modifier为组合键的定义,例如,同时按下Ctrl键;

type为通用类型,例如,键盘按键(KeyPress)

detail用于具体信息,如按下键盘中‘B’键

常用事件类型如下:

【鼠标单击事件】
<Button-1 >:单击鼠标左键
<Button-2>:单击鼠标中间键(如果有)
<Button-3>:单击鼠标右键
<Button-4>:向上滚动滑轮
<Button-5>:向下滚动滑轮

【鼠标双击事件】
<Double-Button-1>:鼠标左键双击
<Double-Button-2>:鼠标中键双击
<Double-Button-3>.:鼠标右键双击

【鼠标释放事件】
<ButtonRelease-1>:鼠标左键释放
<ButtonRelease-2>:鼠标中键释放
<ButtonRelease-3>:鼠标右键释放

【鼠标按下并移动事件(即拖动)】
<B1-Motion>:左键拖动
<B2-Motion>:中键拖动
<B3-Motion>:右键拖动

【鼠标其他操作】
<Enter>:鼠标进入控件(放到控件上面)
<FocusIn>:控件获得焦点
<Leave>:鼠标移出控件
<FocusOut>:控件失去焦点

【键盘按下事件】
<Key>:键盘按下,事件event中的keycode,char都可以获取按下的键值
<Return>:键位绑定,回车键,其它还有<BackSpace>,<Escape>,<Left>,<Up>,<Right>,<Down>等等

【控件属性改变事件】
<Configure>:控件大小改变,新的控件大小会存储在事件event对象中的 width 和 height 属性传递,部分平台上该事件也代表控件位置改变。

【组合使用】
<Control-Shift-Alt-KeyPress-A>:同时按下Ctrl+Shift+Alt+A等4个键
<KeyPress-A>:按下键盘中的’A’键
游戏设备使用参见设备供应商提供的API函数,这里不再赘述,常用的事件类型就是这些了。大家没有必要全部记住,这些事件都是一种类英文的描述,只要记住主要的几个,按照<[modifier-]…type[-detail]>进行组合就可以了。

事件绑定
常见的事件绑定有以下几类
【创建组件对象实例时指定】

创建组件对象实例时,可以通过其命名参数command指定事件处理函数,如为Button控件绑定单击时间,当控件被单击时执行clickhandler函数处理

b = Button(root, text='按钮', command=clickhandler)
1
【实例绑定】

调用组件对象实例方法bind,可以为指定组件实例绑定事件

w.bind('<event>', eventhandler, add='')
1
其中,<event>为事件类型,eventhandler为事件处理函数,可选参数add默认为’’,表示事件处理函数替代其他绑定,如果为‘+’,则加入事件处理队列。

如绑定组件对象,使得Canvas组件实例c可以处理鼠标右键单击事件(处理函数名称为eventhandler),代码如下:

c=Canvas(); c.bind('Button-3', eventhandler)
1
【类绑定】

调用组件对象实例方法bind_class函数,可以为特定类绑定事件

w.bind_class('Widget', '<event>', eventhandler, add='')
1
其中,Widget为组件类;<event>为事件;eventhandler为事件处理函数

如绑定组件类,使得所有Canvas组件实例可以处理鼠标中键事件(事件处理函数为eventhandler)

c = Canvas(); c.bind_class('Canvas', '<Button-2>', eventhandler)
1
【程序界面绑定】

调用组件对象实例方法bind_all函数,可以为所有组件类型绑定事件

w.bind_all('<event>', eventhandler, add='')
1
同上,其中<event>为事件;eventhandler为事件处理函数

如将PrintScreen键与程序中所有组件对象绑定,使得程序界面能处理打印屏幕的键盘事件

c = Canvas(); c.bind('<Key-Print>', printscreen)
1
事件处理函数的编写

【定义事件函数和事件方法】

对于能通过command传入的函数,其参数没有必须指定第一个参数为event的要求。但是通过bind(含bind_class、bind_all,当然,bind_class第一个参数为className,但其后必须是Event实例)绑定的事件,在定义函数方法时(事件处理可以定义为函数,也可以定义为对象的方法),两者都带一个参数event。触发事件调用处理函数时,将传递Event对象实例。

函数定义
def handlerName(event):
1
函数内容

类中定义
def handlerName(self, event):
1
方法内容

【Event事件对象参数属性】

通过传递Event事件对象的属性,可以获取相关参数备程序使用。常用的Event事件参数有以下几种。

widget:产生该事件的控件
x, y:当前鼠标位置
x_root, y_root:当前鼠标相对于屏幕左上角(0,0)的位置,以像素px为单位。
char:字符代码(限键盘事件),作为字符串返回
keysym:关键符号(限键盘事件)
keycode:关键代码(限键盘事件)
num:按钮号码(限鼠标按钮事件)
width, height:小部件的新大小(以像素px为单位)(限配置事件)。

程序猿使用Python的tkinter库进行GUI编程肯定要会的事件处理的更多相关文章

  1. 人在囧途——Java程序猿学习Python

    引言 LZ之前其实一直对python都很好奇,只是苦于平时没有时间去了解它,因此趁着51假期这个机会,便迫不及待的开始了自己的探索.作为一个标准的Java程序猿,在了解python的过程当中,LZ遇到 ...

  2. deepin下安装python的Tkinter库

    在Linux下,如果需要编写界面应用,并且此界面应用对性能的要求不是很高,一般可以使用Python解决.Python中可以使用自带的Tkinter库或者是第三方的Wxpython库,当然Tkinter ...

  3. C#程序猿学习 Python

    孙广东  2016.1.1 交互: C# 运行Python代码: http://stackoverflow.com/questions/11779143/run-a-python-script-fro ...

  4. Linux下使用Python的Tkinter库出现的No module named _tkinter问题

    这是由于python的版本没有包含tkinter的模块,只需要把tk的package安装就可以了. 一般在linux才出现,windows版本一般已经包含了tkinter模块.

  5. Python(十)之GUI编程

    在windwos上实现:使用wxPython模块 #!/usr/bin/env python # encoding: utf-8 import wx #创建open按钮触发的事件对应的函数 def l ...

  6. 【程序猿助手】Emacs,最强的编辑器,之间的不

     wx_fmt=png" alt="" style="max-width:100%; height:auto!important"> 内容简单 ...

  7. python3.6 +tkinter GUI编程 实现界面化的文本处理工具

    更新: 2017.07.17 补充滚动条.win批处理拉起py 2017.08.13 新增自定义图标 --------原创      blogs:    http://www.cnblogs.com/ ...

  8. 实验十五 GUI编程练习与应用程序部署

    实验十五  GUI编程练习与应用程序部署 实验时间 2018-12-6 一:理论部分 1.Java 程序的打包:编译完成后,程序员将.class 文件压缩打包为 .jar 文件后,GUI 界面序就可以 ...

  9. Python GUI之tkinter窗口视窗教程大集合(看这篇就够了) JAVA日志的前世今生 .NET MVC采用SignalR更新在线用户数 C#多线程编程系列(五)- 使用任务并行库 C#多线程编程系列(三)- 线程同步 C#多线程编程系列(二)- 线程基础 C#多线程编程系列(一)- 简介

    Python GUI之tkinter窗口视窗教程大集合(看这篇就够了) 一.前言 由于本篇文章较长,所以下面给出内容目录方便跳转阅读,当然也可以用博客页面最右侧的文章目录导航栏进行跳转查阅. 一.前言 ...

随机推荐

  1. 23 抽象类 abstract

    /*概念 * abstract:关键字,用于修饰方法和类 * 抽象方法:不同类的方法是相似,但是具体内容又不太一样,所以我们只能抽取他的声明,没有具体的方法体,没有具体方法体的方法就是抽象方法 * 抽 ...

  2. Jmeter使用Websocket插件测试SingalR,外加还有阿里云PTS的Jmeter原生测试爬坑日志。

    题外话:距离我的上一篇博客已经过去7年多了,我实在是个不务正业的程序员,遇到测试方面的东西总想分享一下,因为可用的资料实在太少了(包括国外的资料). 本人不喜欢授人以鱼,所以不会直接给出问题和解决方案 ...

  3. 生成3D多棱柱的方法(3D立体图片)

    先上一个效果图 主要运用的技术点就是 确认基点,确认每个盒子旋转的度数 3D变换  transform: rotateY(-360deg); 景深  perspective 3D舞台 transfor ...

  4. AJ学IOS(45)之常用的小功能比如打电话、打开网址、发邮件、发短信打开其他应用。

    AJ分享,必须精品 简介 iOS中的很多小功能都是非常简单的,几行代码就搞定了,比如打电话.打开网址.发邮件.发短信.打开其他应用等. 打电话 方法1 最简单最直接的方式:直接跳到拨号界面 NSURL ...

  5. work of 1/5/2016

    part 组员                今日工作              工作耗时/h 明日计划 工作耗时/h    UI 冯晓云 UI页面切换,词本显示下滑条     6 继续下滑条等增删补 ...

  6. Video tagging systems based on DNNs

    Need: With the ever-growth large-scale video in the mobile phone, so what will everyone get from the ...

  7. J - A strange lift

    计院有一个bug电梯,可能是hyk造的,很多bug,电梯只有两个按钮,“上”和“下”,电梯每层都可以停,每层都有一个数字Ki(0<=Ki<=n),当你在一层楼,你按“上”键会到1+K1层, ...

  8. 计算机系统基础学习笔记(1)-基本GCC,objdump,GBD命令的使用

    基本GCC命令的使用 GCC是一套由GNU项目开发的编程语言编译器,可处理C语言. C++.Fortran.Pascal.Objective-C.Java等等.GCC通常是 跨平台软件的编译器首选.g ...

  9. bluecms v1.6 sp1 代码审计学习

    前言 正式开始代码审计的学习,拓宽自己的知识面.代码审计学习的动力也是来自团队里的王叹之师傅,向王叹之师傅学习. 这里参考了一些前辈,师傅的复现经验和bluecms审计的心得 安装 install.p ...

  10. 文字检测模型EAST应用详解 ckpt pb的tf加载,opencv加载

    参考链接:https://github.com/argman/EAST (项目来源) https://github.com/opencv/opencv/issues/12491  (遇到的问题)    ...