Python GUI编程学习笔记之tkinter事件绑定操作详解


Posted in Python onMarch 30, 2020

本文实例讲述了Python GUI编程学习笔记之tkinter事件绑定操作。分享给大家供大家参考,具体如下:

相关内容:

  • command
  • bind
  • protocol

首发时间:2018-03-04 19:26


command:

  • command是控件中的一个参数,如果使得command=函数,那么点击控件的时候将会触发函数
  • 能够定义command的常见控件有: Button、Menu…
  • 调用函数时,默认是没有参数传入的,如果要强制传入参数,可以考虑使用lambda
from tkinter import *
root=Tk()

def prt():
  print("hello")
def func1(*args,**kwargs):
  print(*args,**kwargs)
hello_btn=Button(root,text="hello",command=prt)#演示
hello_btn.pack()

args_btn=Button(root,text="获知是否button事件默认有参数",command=func1)#获知是否有参数,结果是没有

args_btn.pack()
btn1=Button(root,text="传输参数",command=lambda:func1("running"))#强制传输参数

btn1.pack()

root.mainloop()

bind:

  • bind的用法:控件.bind(event, handler),其中event是tkinter已经定义好的的事件,handler是处理器,可以是一个处理函数,如果相关事件发生, handler 函数会被触发, 事件对象 event 会传递给 handler 函数
  • 基本所有控件都能bind
  • 常见event有:
    • 鼠标单击事件:鼠标左键点击为 <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>. 鼠标相对当前控件的位置会被存储在 event 对象中的 x 和 y 字段中传递给回调函数.
    • 鼠标移入控件事件:<Enter>
    • 获得焦点事件:<FocusIn>
    • 鼠标移出控件事件: <Leave>
    • 失去焦点事件:<FocusOut>
    • 鼠标按下移动事件:鼠标左键点击为 <B1-Motion>, 鼠标中键点击为 <B2-Motion>, 鼠标右键点击为 <B3-Motion>. 鼠标相对当前控件的位置会被存储在 event 对象中的 x 和 y 字段中传递给回调函数.
    • 键盘按下事件:<Key>,event中的keysym ,keycode,char都可以获取按下的键【其他想要获取值的也可以先看看event中有什么】
    • 键位绑定事件:<Return>回车键,<BackSpace>,<Escape>,<Left>,<Up>,<Right>,<Down>…….
    • 控件大小改变事件:<Configure>,新的控件大小会存储在 event 对象中的 width 和 height 属性传递. 有些平台上该事件也可能代表控件位置改变.
  • Event中的属性:
    • widget:产生事件的控件
    • x, y:当前鼠标的位置
    • x_root, y_root:当前鼠标相对于屏幕左上角的位置,以像素为单位。
    • char:字符代码(仅限键盘事件),作为字符串。
    • keysym:关键符号(仅限键盘事件)。
    • keycode:关键代码(仅限键盘事件)。
    • num:按钮号码(仅限鼠标按钮事件)。
    • width, height:小部件的新大小(以像素为单位)(仅限配置事件)。
    • type:事件类型。
from tkinter import *
root=Tk()
root.geometry("200x200")
text=Text(root)
text.pack()

def func(event):
  print(event)
def func_release(event):
  print("release")
#单击
# text.bind("<Button-1>",func)
# root.bind("<Button-1>",func)
#双击
# text.bind("<Double-Button-1>",func)
# 鼠标释放
# text.bind("<ButtonRelease-1>",func_release)
#鼠标移入
# text.bind("<Enter>",func)
#鼠标按住移动事件
# text.bind("<B1-Motion>",func)
#键盘按下事件
# text.bind("<Key>",func)

#键位绑定事件
# def func3(event):
#   print("你按下了回车!")
# text.bind("<Return>",func3)


#实现的一个拖拽功能
def func4(event):
  # print(event)
  x=str(event.x_root)
  y=str(event.y_root)
  root.geometry("200x200+"+x+"+"+y)

text.bind("<B1-Motion>",func4)




root.mainloop()

补充:如果想要传参,可以使用lambda:

text.bind("<Button-1>",lambda event:func(event,"hello"))

 Python GUI编程学习笔记之tkinter事件绑定操作详解

Python GUI编程学习笔记之tkinter事件绑定操作详解


protocol:

  • protocol的使用:控件.protocol(protocol,handler),其中控件为窗口对象(Tk,Toplevel)
  • 常见protocol有:
    • WM_DELETE_WINDOW:最常用的协议称为WM_DELETE_WINDOW,用于定义用户使用窗口管理器明确关闭窗口时发生的情况。如果使用自己的handler来处理事件的话,这时候窗口将不会自动执行关闭
    • WM_TAKE_FOCUS,WM_SAVE_YOURSELF:[这两个不知道什么来的。]
    • 更多需参考ICCCM文档
  • 注意:要留心协议的写法,在作为字符串填入时不要加多余的空格
from tkinter import *
import tkinter.messagebox
root=Tk()
root.geometry("200x200")
def func1():
  if tkinter.messagebox.askyesno("关闭窗口","确认关闭窗口吗"):
    root.destroy()

root.protocol("WM_DELETE_WINDOW",func1)

root.mainloop()

想要了解更多,可以参考tkinter的官方文档:http://effbot.org/tkinterbook/

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python cookbook(数据结构与算法)字典相关计算问题示例
Feb 18 Python
Python3.4实现远程控制电脑开关机
Feb 22 Python
python正则实现提取电话功能
Feb 24 Python
java中两个byte数组实现合并的示例
May 09 Python
python 处理telnet返回的More,以及get想要的那个参数方法
Feb 14 Python
python实现爬山算法的思路详解
Apr 09 Python
Django集成CAS单点登录的方法示例
Jun 10 Python
python-opencv获取二值图像轮廓及中心点坐标的代码
Aug 27 Python
Tensorflow Summary用法学习笔记
Jan 10 Python
Pytorch 保存模型生成图片方式
Jan 10 Python
python属于哪种语言
Aug 16 Python
python基础学习之生成器与文件系统知识总结
May 25 Python
VSCode基础使用与VSCode调试python程序入门的图文教程
Mar 30 #Python
Python实现Wordcloud生成词云图的示例
Mar 30 #Python
Django ModelForm操作及验证方式
Mar 30 #Python
windows10环境下用anaconda和VScode配置的图文教程
Mar 30 #Python
Python GUI编程学习笔记之tkinter控件的介绍及基本使用方法详解
Mar 30 #Python
Python GUI编程学习笔记之tkinter界面布局显示详解
Mar 30 #Python
自定义实现 PyQt5 下拉复选框 ComboCheckBox的完整代码
Mar 30 #Python
You might like
dedecms 批量提取第一张图片最为缩略图的代码(文章+软件)
2009/10/29 PHP
PHP大批量数据操作时临时调整内存与执行时间的方法
2011/04/20 PHP
php中使用Imagick实现图像直方图的实现代码
2011/08/30 PHP
php引用地址改变变量值的问题
2012/03/23 PHP
工厂模式在Zend Framework中应用介绍
2012/07/10 PHP
解析php中mysql_connect与mysql_pconncet的区别详解
2013/05/15 PHP
php密码生成类实例
2014/09/24 PHP
PHP判断字符串长度的两种方法很实用
2015/09/22 PHP
PHP反射学习入门示例
2019/06/14 PHP
jMessageBox 基于jQuery的窗口插件
2009/12/09 Javascript
在JavaScript中获取请求的URL参数
2010/12/22 Javascript
js 数据类型转换总结笔记
2011/01/17 Javascript
jquery ajax post提交数据乱码
2013/11/05 Javascript
String.prototype实现的一些javascript函数介绍
2013/11/22 Javascript
Linux下使用jq友好的打印JSON技巧分享
2014/11/18 Javascript
轻量级的原生js日历插件calendar.js使用指南
2015/04/28 Javascript
js读取并解析JSON类型数据的方法
2015/11/14 Javascript
Jquery 1.9.1源码分析系列(十二)之筛选操作
2015/12/02 Javascript
Ionic快速安装教程
2016/06/03 Javascript
javascript ES6 新增了let命令使用介绍
2017/07/07 Javascript
小程序视频列表中视频的播放与停止的示例代码
2018/07/20 Javascript
vuex页面刷新后数据丢失的方法
2019/01/17 Javascript
通过GASP让vue实现动态效果实例代码详解
2019/11/24 Javascript
基于element-ui封装可搜索的懒加载tree组件的实现
2020/05/22 Javascript
JS实现简单打字测试
2020/06/24 Javascript
详解vue中v-model和v-bind绑定数据的异同
2020/08/10 Javascript
javascript实现时钟动画
2020/12/03 Javascript
python搭建微信公众平台
2016/02/09 Python
Python简单实现查找一个字符串中最长不重复子串的方法
2018/03/26 Python
利用python画出折线图
2018/07/26 Python
浅谈pyqt5中信号与槽的认识
2019/02/17 Python
PyCharm无法引用自身项目解决方式
2020/02/12 Python
Keras 中Leaky ReLU等高级激活函数的用法
2020/07/05 Python
Django model重写save方法及update踩坑详解
2020/07/27 Python
Gap工厂店:Gap Factory
2017/11/02 全球购物
2014年初中班主任工作总结
2014/11/08 职场文书