一个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("", 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)

frame.bind("", callback)

frame.pack()

root.mainloop()

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

事件

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

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

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

事件格式:

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

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

鼠标按下之后释放

双击鼠标

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

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

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

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

a b c ... 1 2 ...

对应键盘上的按键

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

事件对象

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

对象属性:

widget  产生event的实例,不是名字,所有对象拥有

x,y     鼠标位置,单位:像素

x_root,y_root       鼠标相对于屏幕左上角的位置,像素

char        仅键盘事件,string

num     按钮num,仅鼠标事件

width,height        widget新版大小

type        事件类型

实例绑定和类绑定

上面我们用的绑定方法是绑定到一个实例对象上,这就意味着,如果新版建一个实例,它是没有绑定事件的。

实际上,tkinter允许你将事件绑定到类上,甚至是绑定到程序本身。你可以创建四个层面的绑定:

绑定到widget instance 使用bind方法

绑定到widget的toplevel windows,顶层窗口,也是用bind

绑定到widget class,使用bind_class

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

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

python tkinter教程-事件绑定_详解python tkinter教程-事件绑定相关推荐

  1. python 线程安全的数据类型_详解python多线程、锁、event事件机制的简单使用

    详解python多线程.锁.event事件机制的简单使用 发布时间:2020-09-25 02:04:12 来源:脚本之家 阅读:117 作者:君惜 线程和进程 1.线程共享创建它的进程的地址空间,进 ...

  2. python中break怎么用_详解Python中break语句的用法

    详解Python中break语句的用法 在Python中的break语句终止当前循环,继续执行下一个语句,就像C语言中的break一样. break最常见的用途是当一些外部条件被触发,需要从一个循环中 ...

  3. 用于生成随机数的python标准库模块是_详解Python基础random模块随机数的生成

    详解Python基础random模块随机数的生成 来源:中文源码网    浏览: 次    日期:2019年11月5日 [下载文档:  详解Python基础random模块随机数的生成.txt ] ( ...

  4. python可以播放音乐吗_详解python播放音频的三种方法

    第一种 使用pygame模块 pygame.mixer.init() pygame.mixer.music.load(self.wav_file) pygame.mixer.music.set_vol ...

  5. python命令提示符窗口在哪里_详解python命令提示符窗口下如何运行python脚本

    以arcgispro的python脚本为例在arcgispro自带的python窗口下运行python脚本 需求: 将arcgispro的.aprx项目包中gdb的数据源路径更换为sde数据源路径. ...

  6. python中pandas安装视频教程_详解Python中pandas的安装操作说明(傻瓜版)

    很多人来问我pandas的安装(python数据分析里面的必修课) 步骤如下: 安装python的时候,把路径加到系统里,这样,随时可以用pip 路径添加方法: 查找路径: 路径1: 2.例如: 即: ...

  7. python从random生成列表_详解Python利用random生成一个列表内的随机数

    详解Python利用random生成一个列表内的随机数 首先,需要导入random模块: import random 随机取1-33之间的1个随机数,可能重复: random.choice(range ...

  8. python策略模式包含角色_详解Python设计模式之策略模式

    虽然设计模式与语言无关,但这并不意味着每一个模式都能在每一门语言中使用.<设计模式:可复用面向对象软件的基础>一书中有 23 个模式,其中有 16 个在动态语言中"不见了,或者简 ...

  9. [转载] python中for语句用法_详解Python中for循环的使用_python

    参考链接: 在Python中将else条件语句与for循环一起使用 这篇文章主要介绍了Python中for循环的使用,来自于IBM官方网站技术文档,需要的朋友可以参考下 for 循环 本系列前面 &q ...

  10. python函数的使用场景_详解python中strip函数的使用场景

    python strip()函数 介绍,需要的朋友可以参考一下 函数原型 声明:s为字符串,rm为要删除的字符序列 s.strip(rm) 删除s字符串中开头.结尾处,位于 rm删除序列的字符 s.l ...

最新文章

  1. 把磁盘崩溃了,总是进去维护模式,却删除不了fstab文件中的内容
  2. VC 内联汇编中的一个注意事项
  3. 科大星云诗社动态20210521
  4. 浅谈万进制算法与大数定理的结合(高精度乘除法,阶乘)
  5. iOS 之 const
  6. Git初学札记(二)————EGit导入远程Git仓库项目(Clone操作)
  7. Access数据库列名的命名规则
  8. Flex结合java实现一个登录功能
  9. 多功能照片图片处理器小程序源码/流量主系列小程序源码
  10. 第十届泰迪杯数据挖掘B题电力系统负荷预测分析
  11. win10无法修改mac地址_电脑MAC地址(物理地址)修改方法
  12. 使用Visual Studio编译Geos
  13. 中国雅虎邮箱一键迁移到网易邮箱教程
  14. 用k-mer分析进行基因组调查:(五)用GCE分步实现
  15. 自学整理之HTML5常用标签和知识——小白篇
  16. 章节六:带参数请求数据
  17. Acitivity(页面)之间的跳转,ProgressBar 进度条,PopupWindow 弹出框,Dialog 对话框,Spinner下拉框
  18. c语言scanf %4c,scanf(%3c%4c,a,b);当输入ABCDEFGH时 a b的值分别是?怎么来的?
  19. java学习笔记-2
  20. CSV文件导入数据库的三种方法

热门文章

  1. vbs返回结果给java_返回vbs脚本
  2. cad中lisp文件给恶作剧_AutoCAD小秘密062:紧急插播,关于LISP的病毒防治
  3. iis6 元数据库与iis6 配置的兼容 出错问题
  4. 计算机开机硬盘扫描,解决每次开机都检测硬盘
  5. 腾讯QQ珊瑚虫外挂原理分析
  6. j2me 关于MIDP 读取jad文件
  7. Inter core i7处理器中(x86架构)驱动开发:关于APCI Hardware ID的描述
  8. 地质专业考遥感计算机研究生,我想考中国地质大学的研究生,谁能告诉我是选遥感..._在职考研_帮考网...
  9. uploadify3.1 php,Jquery上传插件 uploadify v3.1使用说明_jquery
  10. Android 开发即时聊天工具 YQ 《更新》(源码下载)