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使用paramiko模块实现ssh远程登陆上传文件并执行
Jan 27 Python
python自动化脚本安装指定版本python环境详解
Sep 14 Python
浅谈python配置与使用OpenCV踩的一些坑
Apr 02 Python
对python的bytes类型数据split分割切片方法
Dec 04 Python
python_opencv用线段画封闭矩形的实例
Dec 05 Python
python 调用有道api接口的方法
Jan 03 Python
解决python xx.py文件点击完之后一闪而过的问题
Jun 24 Python
python3.6 tkinter实现屏保小程序
Jul 30 Python
Pandas-Cookbook 时间戳处理方式
Dec 07 Python
python使用Geany编辑器配置方法
Feb 21 Python
Python‘==‘ 及 ‘is‘相关原理解析
Sep 05 Python
Python基础之元编程知识总结
May 23 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
PHP经典的给图片加水印程序
2006/12/06 PHP
php保存信息到当前Session的方法
2015/03/16 PHP
PHP实现获取客户端IP并获取IP信息
2015/03/17 PHP
php中JSON的使用方法
2015/04/30 PHP
windows平台中配置nginx+php环境
2015/12/06 PHP
PHP数字金额转换成中文大写显示
2019/01/05 PHP
PHP读取目录树的实现方法分析
2019/03/22 PHP
Laravel重定向,a链接跳转,控制器跳转示例
2019/10/22 PHP
抽出www.templatemonster.com的鼠标悬停加载大图模板的代码
2007/07/11 Javascript
javascript中直接写php代码的方法
2013/07/31 Javascript
使用typeof方法判断undefined类型
2014/09/09 Javascript
详解maxlength属性在textarea里奇怪的表现
2015/12/27 Javascript
jquery对象与DOM对象转化
2017/02/08 Javascript
chorme 浏览器记住密码后input黄色背景处理方法(两种)
2017/11/22 Javascript
Bootstrap模态对话框中显示动态内容的方法
2018/08/10 Javascript
使用JavaScript计算前一天和后一天的思路详解
2019/12/20 Javascript
原生JS实现萤火虫效果
2020/03/07 Javascript
解决vue动态下拉菜单 有数据未反应的问题
2020/08/06 Javascript
vue.js click点击事件获取当前元素对象的操作
2020/08/07 Javascript
python函数形参用法实例分析
2015/08/04 Python
python基础教程项目三之万能的XML
2018/04/02 Python
Python单向链表和双向链表原理与用法实例详解
2018/08/31 Python
Python使用pymongo库操作MongoDB数据库的方法实例
2019/02/22 Python
Python实现制度转换(货币,温度,长度)
2019/07/14 Python
pytorch多GPU并行运算的实现
2019/09/27 Python
Python中使用gflags实例及原理解析
2019/12/13 Python
pip安装tensorflow的坑的解决
2020/04/19 Python
Python多线程thread及模块使用实例
2020/04/28 Python
Django ForeignKey与数据库的FOREIGN KEY约束详解
2020/05/20 Python
计算机应用与科学个人的自我评价
2013/11/15 职场文书
2014年上半年工作自我评价
2014/01/18 职场文书
优秀干部获奖感言
2014/01/31 职场文书
药剂专业毕业生求职信
2014/06/24 职场文书
2016优秀教师先进个人事迹材料
2016/02/25 职场文书
2016年庆“七一”主题党日活动总结
2016/04/05 职场文书
Java实现简单小画板
2022/06/10 Java/Android