Tkinter - 事件与绑定

响应用户交互和系统事件


bind() 基础

widget.bind(sequence, callback, add=None) → funcid

bind_basics.py

label.bind("<Button-1>", lambda e: print(f"点击位置:{e.x},{e.y}"))
root.bind("<Control-s>", lambda e: save())
root.bind("<Escape>",    lambda e: root.destroy())

事件对象

属性 类型 说明
widget Widget 接收事件的控件
x, y int 鼠标相对于控件的位置
x_root, y_root int 鼠标相对于屏幕的位置
num int 鼠标按钮编号(1、2、3)
keysym str 键名(例如 "Return""a""F5"
char str 输入的字符(可能为空)
state int 修饰键位掩码(Shift、Ctrl、Alt)
delta int 滚动量(鼠标滚轮事件)
width, height int 新尺寸(配置事件)

鼠标事件

序列 触发时机
<Button-1> 鼠标左键按下
<Button-3> 鼠标右键按下
<ButtonRelease-1> 鼠标左键释放
<Double-Button-1> 鼠标左键双击
<B1-Motion> 按住左键时移动鼠标
<Motion> 鼠标移动(任意按键或无按键)
<Enter> / <Leave> 鼠标光标进入/离开控件
<MouseWheel> 鼠标滚轮滚动(event.delta

键盘事件

序列 说明
<Key> 任意按键按下
<Return> 回车键
<Escape> ESC 键
<Tab> / <BackSpace> / <Delete> Tab / 退格 / Delete
<Up> <Down> <Left> <Right> 方向键
<F1><F12> 功能键
<Control-s> Ctrl+S
<Control-Shift-Z> Ctrl+Shift+Z

虚拟事件

虚拟事件 触发时机
<<Cut>> <<Copy>> <<Paste>> 剪贴板操作
<<ComboboxSelected>> ttk.Combobox 选择变更
<<NotebookTabChanged>> ttk.Notebook 标签页切换
<<TreeviewSelect>> ttk.Treeview 行被选中
<<ListboxSelect>> Listbox 选择变更

after() —— 定时器

widget.after(ms, func=None, *args) → after_id

countdown.py

count = tk.IntVar(value=10)
label = ttk.Label(root, textvariable=count, font=("TkDefaultFont", 48))
label.pack(padx=40, pady=20)

def tick():
    n = count.get()
    if n > 0:
        count.set(n - 1)
        root.after(1000, tick)
    else:
        label.config(text="完成!")

root.after(1000, tick)
posted @ 2026-07-10 09:02  箫笛  阅读(4)  评论(0)    收藏  举报