Python桌面开发tkinter-事件

事件类型

鼠标事件

  • <Button-1> | <ButtonPress-1>:按下鼠标左键
  • <Button-2> | <ButtonPress-2>:按下鼠标中键
  • <Button-3> | <ButtonPress-3>:按下鼠标右键
  • <Enter>:鼠标进入组件区域
  • <Leave>:鼠标离开组件区域
  • <ButtonRelease-1>:释放鼠标左键
  • <ButtonRelease-2>:释放鼠标中键
  • <ButtonRelease-3>:释放鼠标右键
  • <B1-Motion>:按住鼠标左键移动
  • <B2-Motion>:按住鼠标中键移动
  • <B3-Motion>:按住鼠标右键移动
  • <Double-Button-1>:双击鼠标左键
  • <Double-Button-2>:双击鼠标中键
  • <Double-Button-3>:双击鼠标右键
  • <Triple-Button-1>:三击鼠标左键
  • <Triple-Button-2>:三击鼠标中键
  • <Triple-Button-3>:三击鼠标右键
  • <MouseWheel>:滚动鼠标滚轮

键盘事件

  • <Key> | <KeyPress>:按下任何键
  • <KeyPress-A>:按下A键,其他键雷同
  • <Shift+A>:同时按下Shift+A键,可将Alt、Shift、Control和其他键组合
  • <Control-KeyPress-r>:按下Ctrl+r

事件对象

鼠标键盘事件类型

  • char:从键盘输入的和按键事件相关的字符
  • type:事件类型
  • keycode:从键盘输入的和按键事件相关的键的键代码(统一码)
  • keysym:从键盘输入的和按键事件相关的键的键符号(字符)
  • num:按键数字(1,2,3),按下的是哪个鼠标键。
  • widget:触发这个事件的小构件对象
  • width,height:组件改变后的大小和configure相关
  • x, y:当前鼠标在小构件中的坐标
  • x_root, y_root:当前鼠标相对屏幕左上角的坐标

窗口和组件相关的事件类型

  • Activate:当组件由不可用变为可用(针对state的变直)
  • Deactivate:当组件由可用变为不可用时触发
  • Configure:组件大小发生变化时触发
  • Destory:组件销毁时
  • FocusIn:组件获取焦点时触发,针对于Entry和Text有效
  • Map:组件由隐藏变为显示时
  • Unmap:组件由显示变为隐藏时
  • Perproty:窗口属性发生变化时

事件绑定

  • 事件绑定有2种方式:添加command参数和bind绑定函数,这里主要说后者

  • 3种事件绑定函数:

    • widget.bind('事件类型', 事件函数)为组件绑定一个事件
    • widget.bind_class('组件类型', '事件类型', 事件函数):
      • 为一类组件绑定一个操作,组件类型如这样:Button、Label…
      • bind('Entry', '<Control-V>', func) 绑定所有输入框Ctrl+V快捷键
    • widget.bind_all('事件类型', 事件函数)
      • 为所有组件绑定一个操作(所有操作都会当作对主界面的操作)
      • 它通常用于全局的快捷键,如F1通常是打开帮助文档
  • 注意

    • 事件函数必须传入e参数
    • 为按钮添加一个点击时的操作 => 事件类型
    • 使用按钮的command=参数指定函数 => 事件绑定函数
    • 按钮操作过程中的信息 => 事件对象

事件解绑

  • 语法: unbind('事件类型')
  • 注意: 无需传入事件函数,会解除所有已绑定的函数

示例

鼠标右键弹出菜单,点击最后一个菜单显示文本

import tkinter as tk

root = tk.Tk()
root.minsize(500, 300)

menu_bar = tk.Menu(root)
# 这里不能包括韩秀,韩秀要单独加
cmd_list = ['迪丽热巴', '古力娜扎', '马儿扎哈']
for item in cmd_list:
    menu_bar.add_command(label=item)
menu_bar.add_command(label='阿兹尔', command=lambda: tk.Label(root, text="恕瑞玛,你的皇帝回来了!").pack(side='bottom'))
root.bind("<Button-3>", lambda e: menu_bar.post(e.x_root, e.y_root))

root.mainloop()

在这里插入图片描述
在这里插入图片描述

输入框获取焦点背景变为red,失去焦点变为cyan

import tkinter as tk

root = tk.Tk()
root.minsize(500, 300)

def change_self_color(e, color='white'):
    e.widget['bg'] = color

entry = tk.Entry(root)
entry.pack()
entry_1 = tk.Entry(root)
entry_1.pack()

# 事件绑定
# 1.通过绑定事件函数操作,对应的事件函数,必须有形参(event)接受事件对象
# 2.事件函数必须在绑定{之前}定义
entry.bind("<FocusIn>", lambda e: change_self_color(e, 'red'))
entry.bind("<FocusOut>", lambda e: change_self_color(e, 'cyan'))
# 键盘事件, 注意r必须小写
root.bind("<Control-KeyPress-r>", lambda e: change_self_color(e, '#ccc'))

root.mainloop()

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

监听鼠标不同事件

import tkinter as tk

root = tk.Tk()
root.minsize(500, 300)

def change_self_color(e, color='white'):
    e.widget['bg'] = color

def change_color(e):
    entry['bg'] = 'green'

button = tk.Button(root, text='Hello')
button.pack()
# bind_all绑定所有事件
button.bind_all('<Button-1>', change_color)
entry = tk.Entry(root)
entry.pack()
# bind_class函数绑定一类事件
for i in range(6):
    btn = tk.Button(root, text='{}'.format(i))
    btn.place(x=230, y=i * 20 + 100, width=40, height=20)
    btn.bind_class('Button', '<Enter>', lambda e: change_self_color(e, 'cyan'))
    btn.bind_class('Button', '<Leave>', change_self_color)

root.mainloop()

在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值