事件类型
用户通过鼠标、键盘、游戏控制设备在与图形界面交互时,就会触发事件。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. XSS(跨站脚本攻击)简单讲解

    1.1 XSS简介 跨站脚本攻击(XSS),是最普遍的Web应用安全漏洞.这类漏洞能够使得攻击者嵌入恶意脚本代码(一般是JS代码)到正常用户会访问到的页面中,当正常用户访问该页面时,则可导致嵌入的恶意 ...

  2. hive常用函数一

    Hive概念 Hive最适合于数据仓库应用程序,使用该应用程序进行相关静态数据分析,不需要快速响应出结果,而数据本身不会发生频繁变化. Hdfs分布式文件系统限制了hive,使其不支持记录级别的更新. ...

  3. Thinking in Java,Fourth Edition(Java 编程思想,第四版)学习笔记(四)之Operators

    At the lowest level, data in Java is manipulated using operators Using Java Operators An operator ta ...

  4. pandas basic cheatsheet

    "胖的要死"是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的.Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具. 有多大?这篇 ...

  5. Bi-shoe and Phi-shoe LightOJ - 1370

    欧拉函数. 欧拉函数打表模板: #define maxn 3000010 int p[maxn]; void oula(){ int i,j; ; i<=maxn; i++) p[i]=i; ; ...

  6. Problem D. Ice Cream Tower

    题解:二分加贪心,,,二分答案,然后进行判断,判断的时候,首先给每一组配一个最大的球,然后在向每一组里面填球,注意填球的时候要按组进行,每一组先填一个,然后更新每一组内的最小值,方便下一次寻找. #i ...

  7. G. 大树的水塘

    已知每块石头中的规格是1×1×1,水塘的长度为N,宽度为1,在第i位置,大树放了ai个石头 设大树建造的水塘蓄水量为V 请你求出在长度和宽度不变的情况下,建造一个蓄水量不小于V的水塘最多可以节约多少石 ...

  8. Linux命令与Shell

    Linux 目录结构及解释 查看命令行执行完位置:  echo $BASH 命令记录 mkdir mkdir命令 用来创建目录. 语法:mkdir (选项)(参数) 主要选项: -m<目标属性& ...

  9. 排序算法代码实现-Java

    前言 为了准备面试,从2月开始将排序算法认认真真得刷了一遍,通过看书看视频,实践打代码,还有一部分的leetcode题,自己感觉也有点进步,将笔记记录总结发出来. 冒泡排序 该排序就是一种像泡泡浮到水 ...

  10. 攻防世界Web新手解析

    攻防世界入门的题目 view source 禁用右键,F12审查元素 get post hackbar进行post robots 直接访问robots.txt,发现f1ag_1s_h3re.ph文件, ...