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 time模块详解(常用函数实例讲解,非常好)
Apr 24 Python
python使用cPickle模块序列化实例
Sep 25 Python
Python入门篇之编程习惯与特点
Oct 17 Python
Python3 正在毁灭 Python的原因分析
Nov 28 Python
在Ubuntu系统下安装使用Python的GUI工具wxPython
Feb 18 Python
python的concat等多种用法详解
Nov 28 Python
pandas求两个表格不相交的集合方法
Dec 08 Python
浅析python参数的知识点
Dec 10 Python
在python中,使用scatter绘制散点图的实例
Jul 03 Python
使用Filter过滤python中的日志输出的实现方法
Jul 17 Python
简单了解Python write writelines区别
Feb 27 Python
python环境搭建和pycharm的安装配置及汉化详细教程(零基础小白版)
Aug 19 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
腾讯QQ微博API接口获取微博内容
2013/10/30 PHP
PHP常用技术文之文件操作和目录操作总结
2014/09/27 PHP
Android App中DrawerLayout抽屉效果的菜单编写实例
2016/03/21 PHP
php格式文件打开的四种方法
2018/02/24 PHP
Array对象方法参考
2006/10/03 Javascript
疯掉了,尽然有js写的操作系统
2007/04/23 Javascript
Mootools 1.2教程(21)——类(二)
2009/09/15 Javascript
JSChart轻量级图形报表工具(内置函数中文参考)
2010/10/11 Javascript
js变量、作用域及内存详解
2014/09/23 Javascript
jquery动态分页效果堪比时光网
2014/09/25 Javascript
JS脚本实现动态给标签控件添加事件的方法
2016/06/02 Javascript
jQuery快速实现商品数量加减的方法
2017/02/06 Javascript
react学习笔记之state以及setState的使用
2017/12/07 Javascript
详解ES6通过WeakMap解决内存泄漏问题
2018/03/09 Javascript
使用 vue 实例更好的监听事件及vue实例的方法
2019/04/22 Javascript
jQuery实现移动端图片上传预览组件的方法分析
2020/05/01 jQuery
vue结合el-upload实现腾讯云视频上传功能
2020/07/01 Javascript
Python常用模块用法分析
2014/09/08 Python
Python Pandas中根据列的值选取多行数据
2019/07/08 Python
Python中的延迟绑定原理详解
2019/10/11 Python
使用Rasterio读取栅格数据的实例讲解
2019/11/26 Python
Python有参函数使用代码实例
2020/01/06 Python
Python Tornado之跨域请求与Options请求方式
2020/03/28 Python
HTML5中使用json对象的实例代码
2018/09/10 HTML / CSS
html5视频媒体标签video的使用方法及完整参数说明详解
2019/09/27 HTML / CSS
Dyson戴森波兰官网:Dyson.pl
2019/08/05 全球购物
团工委书记自荐书范文
2013/12/17 职场文书
运动会开幕式邀请函
2014/01/22 职场文书
参观接待方案
2014/03/17 职场文书
酒鬼酒广告词
2014/03/21 职场文书
司仪主持词两篇
2014/03/22 职场文书
离婚协议书怎么写的
2014/12/14 职场文书
奖学金个人总结
2015/03/04 职场文书
小学数学教师研修日志
2015/11/13 职场文书
为什么node.js不适合大型项目
2021/04/28 Javascript
python保存图片的四个常用方法
2022/02/28 Python