本文主要介绍Python tkinter 事件方法和事件属性及鼠标事件示例。
tkinter系列文章
Python tkinter (2) —— Button标签
Python tkinter (8) ——Spinbox控件
Python tkinter (10) ——Combobox控件
Python tkinter (11) —— Frame控件
Python tkinter (12) —— Treeview控件
目录
事件方法
事件 | 描述 |
<Bi-Motion> | 当鼠标左键被按住在小构件且移动鼠标时事件发生 |
<Button-i> | Button-1、Button-2、Button-3 表明左键、中问键和右键,当在小构件上单击鼠标左键时,Tkinter 会自动抓到限标指针的位置,ButtonPressed-i是Button-i的代名词 |
<ButtonRelease-i> | 当释放鼠标左键时事件发生 |
<Double-Button-i> | 当双击鼠标左键时事件发生 |
<Enter> | 当鼠标光标进入小构件时事件发生 |
<Key> | 当单击一个键时事件发生 |
<Leave> | 当鼠标光标离开小构件时事件发生 |
<Return> | 当单击“Enter”键时事件发生,可以将键盘上的任意键(像“A”、“B”、”Up”"Down”、“Left”、“Right”)和一个事件绑定 |
<Shift+A> | 当单击“Shift+A”键时事件发生,可以将Alt、Shift和Control和其他键组合 |
<Triple-Button-i> | 当三次单击鼠标左键时事件发生 |
事件属性
事件属性 | 描述 |
char | 从键盘输入的和按键事件相关的字符 |
keycode | 从键盘输入的和按键事件相关的键的键代码(即统一码) |
keysym | 从键盘输人的和按键事件相关的键的键符号(即字符) |
num | 按键数字(1、2、3)表明按下的是哪个鼠标键 |
widget | 触发这个事件的小构件对象 |
x和y | 当前鼠标在小构件中以像素为单位的位置 |
xroot和yroot | 当前鼠标相对于屏幕左上角的以像素为单位的位置 |
鼠标点击事件
单击事件
单击分为左键、中键、右键三种,使用bind绑定<Button-i>来实现。
示例如下:
import tkinter
tk = tkinter.Tk()
tk.title('简单示例')
tk.geometry('300x200+200+20')
def click_fun(event):
print(event.x, event.y)
button1 = tkinter.Button(tk, text='鼠标左键')
button1.pack()
button1.bind('<Button-1>', click_fun)
button2 = tkinter.Button(tk, text='鼠标右键')
button2.pack()
button2.bind('<Button-3>', click_fun)
button3 = tkinter.Button(tk, text='鼠标中键')
button3.pack()
button3.bind('<Button-2>', click_fun)
tk.mainloop()
双击事件
使用bind绑定<Double-Button-i>来实现。
示例如下:
# <Double-Button-1> 鼠标左键双击
# <Double-Button-3> 鼠标右键双击
# <Double-Button-2> 鼠标中键双击
button4 = tkinter.Button(tk, text='鼠标左键双击')
button4.pack()
button4.bind("<Triple-Button-1>", click_fun)
三击事件
使用bind绑定<Double-Button-i>来实现。
示例如下:
# <Triple-Button-1> 鼠标左键三击
# <Double-Button-3> 鼠标右键三击
# <Double-Button-2> 鼠标中键三击
button5 = tkinter.Button(tk, text='鼠标左键三击')
button5.pack()
button5.bind("<Triple-Button-1>", click_fun)
鼠标移动事件
鼠标移动事件在绑定<Bi-Motion>后,需要鼠标移动到文本上后,按住进行移动触发。
示例如下:
import tkinter
tk = tkinter.Tk()
tk.title('简单示例')
tk.geometry('300x200+200+20')
label1 = tkinter.Label(tk, text='中华儿女多奇志,不爱红装爱武装')
label1.pack()
def mouse_fun(event):
print(event.x, event.y)
# 鼠标左键
label1.bind('<B1-Motion>', mouse_fun)
# 鼠标中键
label1.bind('<B2-Motion>', mouse_fun)
# 鼠标右键
label1.bind('<B3-Motion>', mouse_fun)
tk.mainloop()
鼠标释放事件
对文本控件绑定<ButtonRelease-i>后,使用鼠标相应按键,
在文本上点击或按住然后释放即可触发。
示例如下:
import tkinter
tk = tkinter.Tk()
tk.title('简单示例')
tk.geometry('300x200+200+20')
def release_fun(event):
print(event.x, event.y)
# 释放鼠标左键
label1 = tkinter.Label(tk, text='莫听穿林打叶声')
label1.pack()
label1.bind('<ButtonRelease-1>', release_fun)
# 释放鼠标右键
label2 = tkinter.Label(tk, text='何妨吟啸且徐行')
label2.pack()
label2.bind('<ButtonRelease-3>', release_fun)
# 释放鼠标中键
label3 = tkinter.Label(tk, text='回首向来萧瑟处,归去,也无风雨也无晴')
label3.pack()
label3.bind('<ButtonRelease-2>', release_fun)
tk.mainloop()
光标进入事件
绑定<Enter>事件,鼠标光标进入控件时触发。
光标离开事件
绑定<Leave>事件,鼠标光标离开控件时触发。
示例如下:
import tkinter
tk = tkinter.Tk()
tk.title('简单示例')
tk.geometry('300x200+200+20')
def entry_fun(event):
print('进入事件')
print(event.x, event.y)
def leave_fun(event):
print('离开事件')
print(event.x, event.y)
# 鼠标光标进入控件时触发
label1 = tkinter.Label(tk, text='莫听穿林打叶声')
label1.pack()
label1.bind('<Enter>', entry_fun)
# 鼠标光标离开控件时触发
label2 = tkinter.Label(tk, text='何妨吟啸且徐行')
label2.pack()
label2.bind('<Leave>', leave_fun)
tk.mainloop()
总结
本文主要介绍Python tkinter 事件方法和事件属性及几种鼠标事件和示例。