首页 > 其他分享 ># Tkinter Event事件处理

# Tkinter Event事件处理

时间:2024-08-15 18:22:34浏览次数:13  
标签:事件处理 Tkinter bind 绑定 event 按钮 print Event lambda

#本文章建议有python基础学习理解,主要介绍了tkinter库的事件处理,由本人(菜鸟)从通义千问上经过整理获得,较全面和使用方便,希望大佬帮忙进行完善

# 事件处理,是 GUI 程序中不可或缺的重要组成部分,相比来说,控件只是组成一台机器的零部件,# 而事件处理则是驱动这台机器“正常”运转的关键所在,它能够将

# Tkinter支持多种类型的事件,包括但不限于:
# <Button>: 鼠标按钮事件
# <KeyPress>: 键盘按键事件
# <Configure>: 窗口大小改变事件
# <Enter> 和 <Leave>: 鼠标进入或离开控件事件
# bind 方法是用于将特定的事件与函数或其他可调用对象关联起来的重要工具。下面是对 bind 方法及其参数的详细说明
# bind 方法的基本形式如下:
# widget.bind(sequence, func=None, add=None)
# 2. 参数详解
# sequence (必需)
# 类型: 字符串
# 作用: 指定要绑定的事件序列。

# 常见事件序列:
# <Button>: 鼠标按钮事件。
# <KeyPress>: 键盘按键事件。
# <Configure>: 窗口大小改变事件。
# <Enter> 和 <Leave>: 鼠标进入或离开控件事件。
# <FocusIn> 和 <FocusOut>: 焦点进入或离开控件事件。
# <Return>: 回车键事件。
# <Escape>: 逃逸键事件。
# <Tab>: Tab 键事件。
# <Delete>: 删除键事件。
# <Insert>: 插入键事件。
# <Control-KeyPress>: 按下 Control 键的同时按下另一个键。
# <Shift-KeyPress>: 按下 Shift 键的同时按下另一个键。
# <Alt-KeyPress>: 按下 Alt 键的同时按下另一个键。
# <Double-Button>: 双击鼠标按钮事件。
# <Triple-Button>: 三击鼠标按钮事件。
# <B1-Motion>: 按住鼠标左键移动事件。
# <B2-Motion>: 按住鼠标中间键移动事件。
# <B3-Motion>: 按住鼠标右键移动事件。
# <MouseWheel>: 鼠标滚轮事件(仅限某些系统)。

# func (可选)
# 类型: 函数或其他可调用对象
# 作用: 当指定的事件发生时,将调用此函数或对象。
# 注意: 如果省略 func 参数,则 bind 方法将返回一个函数,该函数可以在之后用于绑定事件。

# add (可选)
# 类型: 字符串
# 作用: 控制是否将新绑定添加到现有绑定列表中。
# 可能的值:
# None: 默认值,表示替换现有的绑定。
# "+": 将新绑定添加到现有的绑定列表末尾。
# "+" 通常用于需要多个绑定的情况,例如绑定多个事件处理器到同一个事件上。
import tkinter as tk

# 创建主窗口
root = tk.Tk()
root.title("事件处理示例")

# 创建一个按钮
button = tk.Button(root, text="点击我!")
button.pack()

# 绑定鼠标左键点击事件到按钮
# 当鼠标左键点击按钮时,打印出点击位置的坐标
button.bind("<Button-1>", lambda event: print("按钮被点击在 x={}, y={}".format(event.x, event.y)))

# 绑定鼠标中间键点击事件到按钮
# 当鼠标中间键点击按钮时,打印出点击位置的坐标
button.bind("<Button-2>", lambda event: print("鼠标中间键被点击在 x={}, y={}".format(event.x, event.y)))

# 绑定鼠标右键点击事件到按钮
# 当鼠标右键点击按钮时,打印出点击位置的坐标
button.bind("<Button-3>", lambda event: print("鼠标右键被点击在 x={}, y={}".format(event.x, event.y)))

# 绑定键盘按键事件到所有控件
# 当按下任意键时,打印出按下的键名
root.bind("<KeyPress>", lambda event: print("按键被按下: {}, 状态位: {}".format(event.keysym, event.state)))

# 绑定窗口大小改变事件到主窗口
# 当窗口尺寸发生变化时,打印新的宽度和高度
root.bind("<Configure>", lambda event: print("窗口调整为宽度={}, 高度={}".format(event.width, event.height)))

# 绑定鼠标进入和离开控件事件到按钮
# 当鼠标进入按钮时,打印提示信息
button.bind("<Enter>", lambda event: print("鼠标进入按钮。"))
# 当鼠标离开按钮时,打印提示信息
button.bind("<Leave>", lambda event: print("鼠标离开按钮。"))

# 绑定焦点进入和离开控件事件到按钮
# 当按钮获得焦点时,打印提示信息
button.bind("<FocusIn>", lambda event: print("按钮获得焦点。"))
# 当按钮失去焦点时,打印提示信息
button.bind("<FocusOut>", lambda event: print("按钮失去焦点。"))

# 绑定回车键事件到所有控件
# 当按下回车键时,打印提示信息
root.bind("<Return>", lambda event: print("回车键被按下。"))

# 绑定逃逸键事件到所有控件
# 当按下 Esc 键时,打印提示信息
root.bind("<Escape>", lambda event: print("Esc 键被按下。"))

# 绑定 Tab 键事件到所有控件
# 当按下 Tab 键时,打印提示信息
root.bind("<Tab>", lambda event: print("Tab 键被按下。"))

# 绑定删除键事件到所有控件
# 当按下 Delete 键时,打印提示信息
root.bind("<Delete>", lambda event: print("Delete 键被按下。"))

# 绑定插入键事件到所有控件
# 当按下 Insert 键时,打印提示信息
root.bind("<Insert>", lambda event: print("Insert 键被按下。"))

# 绑定按下 Control 键的同时按下另一个键的事件到所有控件
# 当按下 Control 键和另一个键时,打印提示信息
root.bind("<Control-KeyPress>", lambda event: print("Control 和按键被按下: {}, 状态位: {}".format(event.keysym, event.state)))

# 绑定按下 Shift 键的同时按下另一个键的事件到所有控件
# 当按下 Shift 键和另一个键时,打印提示信息
root.bind("<Shift-KeyPress>", lambda event: print("Shift 和按键被按下: {}, 状态位: {}".format(event.keysym, event.state)))

# 绑定按下 Alt 键的同时按下另一个键的事件到所有控件
# 当按下 Alt 键和另一个键时,打印提示信息
root.bind("<Alt-KeyPress>", lambda event: print("Alt 和按键被按下: {}, 状态位: {}".format(event.keysym, event.state)))

# 绑定双击鼠标按钮事件到按钮
# 当双击按钮时,打印提示信息
button.bind("<Double-Button-1>", lambda event: print("按钮被双击。"))

# 绑定三击鼠标按钮事件到按钮
# 当三击按钮时,打印提示信息
button.bind("<Triple-Button-1>", lambda event: print("按钮被三击。"))

# 绑定按住鼠标左键移动事件到按钮
# 当按住鼠标左键移动时,打印当前位置
button.bind("<B1-Motion>", lambda event: print("鼠标拖动到 x={}, y={}".format(event.x, event.y)))

# 绑定按住鼠标中间键移动事件到按钮
# 当按住鼠标中间键移动时,打印当前位置
button.bind("<B2-Motion>", lambda event: print("鼠标中间键拖动到 x={}, y={}".format(event.x, event.y)))

# 绑定按住鼠标右键移动事件到按钮
# 当按住鼠标右键移动时,打印当前位置
button.bind("<B3-Motion>", lambda event: print("鼠标右键拖动到 x={}, y={}".format(event.x, event.y)))

# 绑定鼠标滚轮事件到按钮
# 当滚动鼠标滚轮时,打印提示信息
button.bind("<MouseWheel>", lambda event: print("鼠标滚轮滚动: {}, 状态位: {}".format(event.delta, event.state)))

# 使用 add 参数将新绑定添加到现有的绑定列表中
# 当按钮获得焦点时,先打印 "按钮获得焦点。"
button.bind("<FocusIn>", lambda event: print("按钮获得焦点。"))

# 当按钮获得焦点时,再打印 "额外的焦点信息。"
button.bind("<FocusIn>", lambda event: print("额外的焦点信息。"), "+")

# 绑定 a 键事件到所有控件
# 当按下 a 键时,打印提示信息
root.bind("<a>", lambda event: print("a 键被按下。"))

# 绑定 b 键事件到所有控件
# 当按下 b 键时,打印提示信息
root.bind("<b>", lambda event: print("b 键被按下。"))

# 绑定 c 键事件到所有控件
# 当按下 c 键时,打印提示信息
root.bind("<c>", lambda event: print("c 键被按下。"))

# 绑定 d 键事件到所有控件
# 当按下 d 键时,打印提示信息
root.bind("<d>", lambda event: print("d 键被按下。"))

# 运行主循环
root.mainloop()







# event.widget: 触发事件的控件。
# event.num: 按下的按钮编号。
# event.x 和 event.y: 鼠标位置相对于控件的坐标。
# event.keysym: 按下的键名(对于键盘事件)。
# event.width 和 event.height: 对于 <Configure> 事件,表示新的宽度和高度。
# event.state: 当前的状态位,例如是否按下了 Shift、Ctrl 或 Alt 键
#  解绑事件
# 如果需要在某个时刻取消绑定,可以使用 unbind 方法:
# widget.unbind(sequence)

标签:事件处理,Tkinter,bind,绑定,event,按钮,print,Event,lambda
From: https://blog.csdn.net/weixin_75280654/article/details/141228988

相关文章

  • MoseEvent 中的几种坐标系
    本文主要内容:screenX和screenY,clientX和clientY/x和ypageX和pageYlayerX和layerY在处理鼠标事件(MouseEvent)时,了解不同的坐标系是非常重要的。常见的坐标系包括屏幕坐标(screen)、客户端坐标(client)、页面坐标(page)、图层坐标(layer),以及偏移坐标(offset)。这些坐标系各......
  • Vue事件处理
    点击按钮的时候,次数加一第一种:在click里面直接写js的代码需求:使用@click=“counter+=1”,代码如下:<buttontype="button"@click="counter+=1">按钮1</button><p>按钮1被点击的次数:{{counter}}</p>第二种:在vue的methods中进行定义<body><divid="app......
  • 2.第一天(第二部分):Explaining Intrusion Prevention
    入侵防御系统cisco在入侵检测方面使用了一种混合技术ips技术不成熟ips的性能和具体的包类型和大小有关系command接口有ip,有路由能力,网关主机通过这个接口进行网管。montor接口没有ip,网络不课件,接受数据,发送rooot杂合模式和在线模式更好的对atomicattack攻击进行防御,以前......
  • 【Python机器学习】树回归——使用Python的tkinter库创建GUI
    机器学习给我们提供了一些强大的工具,能从未知数据中抽取出有用的信息。因此,能否这些信息以易于人们理解的方式呈现十分重要。如果人们可以直接与算法和数据交互,将可以比较轻松的进行解释。其中一个能够同时支持数据呈现和用户交互的方式就是构建一个图形用户界面(GUI)。利用GUI......
  • 事件驱动系统设计之将事件检索与事件处理解耦
    0前言part1讨论了集成过程中遇到的挑战以及幂等事件处理的作用。解决集成问题之后,我们需要反思事件检索的问题。我们的经验教训表明,将事件检索与事件处理解耦至关重要。1事件处理与请求/响应API紧耦合part1讨论了将请求/响应API集成到事件驱动微服务中时,由于基于请求/响......
  • 029.Vue3入门,父页面自定义Event传给子页面,子页面通过此Event回传数据给父页面
    1、App.vue代码:<template><Father/></template><scriptsetup>importFatherfrom'./view/Father.vue'</script><style></style>2、Father代码如下:<template><h3>父页面</h3><p>......
  • Java中的异步编程模型与事件处理框架:从CompletableFuture到Reactive Streams
    Java中的异步编程模型与事件处理框架:从CompletableFuture到ReactiveStreams大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!在现代软件开发中,异步编程和事件驱动架构变得越来越重要。它们能有效提高应用程序的性能和响应速度,特别是在处理高并发和I......
  • 008.Vue3入门,最基础的事件处理,点击按钮增加次数,支持传参
    1、代码如下:<template><h3>内联事件处理群</h3><button@click="addCount1">Add</button><p>{{count1}}</p><button@click="addCount2('hello')">按钮</button><p>{{coun......
  • Intrusion Prevention System(入侵防御系统)
    IPS入侵防御系统ips基于行为检测、特征库匹配以及威胁建模等方法,检测入侵行为(包括木马、蠕虫,病毒等),不同于常用的ids,入侵防御系统有主动的反制手段,通过一定的响应方式,实时地中止入侵行为。产生的原因:随着互联网的不断壮大网络中的威胁也日益增多道高一尺魔高一丈多年来攻......
  • Tkinter 按钮不更新变量
    我有一个类中有两个单选按钮的GUI,使用tkinter的第一个单选按钮旨在将变量save_to_excel设置为True,而第二个单选按钮应为false,这是为了让用户确定是否要保存信息作为Excel工作表或文本文档。我有一个旧版本的代码,可以工作并正确更新变量,但是新版本必须更改某些内容,而新版......