文章目录
- 鼠标点击事件
- 进入或离开控件
- 键盘事件
- Configure事件
控件和人通过事件来交互,Tkinter
中则通过Bind
来绑定事件。例如
import tkinter as tk
root = tk.Tk()
txt = tk.StringVar()
btn = tk.Button(root, textvariable=txt, width=30, height=5)
btn.pack()
btn.bind("<Button-1>", lambda evt: txt.set("我被左键点了"))
btn.bind("<Button-3>", lambda evt: txt.set("我被右键点了"))
root.mainloop()
效果如下
其中,bind
用于绑定事件,第一个参数<Button-1>
在鼠标左键点击时触发,后面的lambda
表达式为触发后的函数,txt.set()
用于设置StringVar
的字符串。
鼠标点击事件
在tkinter
中,提供了四种鼠标点击动作,分别表示单击、双击、点击时移动以及松开鼠标,如下表所示。
标志 | 动作 | 备注 |
---|---|---|
<Button> | 鼠标单击事件 | 可用数字1-5 |
<Double-Button> | 双击鼠标 | 可用数字1-3 |
<Motion> | 鼠标移动 | 可用数字1-3 |
<ButtonRelease> | 松开鼠标 | 可用数字1-3 |
下面具体解释备注栏种所谓的可用数字。
每个动作针对左键、中键(滚轮)和右键提供了不同的动作,左键、中键和右键分别对应1,2,3
,以左键为例,其动作分别如下
标志 | 动作 | 备注 |
---|---|---|
<Button-1> | 单击鼠标左键 | |
<Double-Button-1> | 双击鼠标左键 | |
<B1-Motion> | 移动鼠标左键 | |
<ButtonRelease-1> | 松开鼠标鼠标 |
此外,<Button-4>
表示滚轮上滑,<Button-5>
表示滚轮下滑。
进入或离开控件
当鼠标进入某个控件时,会触发动作Enter
;离开这个控件时会触发<Leave>
。
当键盘的光标进入某个控件时,会触发<FocusIn>
;当键盘光标离开某个控件时,会触发<FocusOut>
。
键盘事件
键盘事件的统一标记是<Key>
,示例如下
import tkinter as tk
root = tk.Tk()
txt = tk.StringVar()
txt.set("按键盘")
lbl = tk.Label(root, textvariable=txt, width=30, height=5)
lbl.focus_set()
lbl.pack()
def keyBack(evt):
msg = f"您点击了{evt.char}, ASCII代码{evt.keycode}\n"
msg += f"按键名称{evt.keysym}, 代码{evt.keysym_num}"
txt.set(msg)
lbl.bind("<Key>", keyBack)
root.mainloop()
效果为
通过keycode
和keysym_num
的区别,可以更加精确地捕捉键盘事件。
如果想设置快捷键,则可直接在<>
中括上想要捕捉的按键,如果为多个按键,不同按键之间通过-
连接,例如<Ctrl-C>
表示按下Ctrl
+C
时触发事件。
除了常规的字母按键之外,还有几个特殊按键,如下表所示
代码 | 说明 |
---|---|
<Shift_L> | 左shift键 |
<Shift_R> | 右shift键 |
<F2> | F2键,Fxx以此类推 |
<Return> | 回车 |
<BackSpace> | 退格删除键 |
Configure事件
<Configure>
事件将在窗口或控件尺寸、位置发生变化时触发,
import tkinter as tk
def testCall(evt):
print("窗口变了")
root = tk.Tk()
root.geometry('400x300+450+300')
root.bind('<Configure>', testCall)
root.mainloop()
效果为
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sUf3d09A-1675844138229)(python/tk_bind_3.gif)]