发布时间:2018-06-09 13:44:28编辑:Run阅读(4899)
两个事件同时绑定到一个控件
将两个事件绑定为同一个组件
代码:
import tkinter as tk root = tk.Tk() # 为 root 绑定两个事件 # Key 事件处理函数 def printEvent(event): print('<Key>',event.keycode) # Return 事件处理函数 def printReturn(event): print('<Return>',event.keycode) root.bind('<Key>',printEvent) root.bind('<Return>', printReturn) root.mainloop()
结果:
当按键除了 Return 之外,都是由 printEvent 来处理
当按键为 Return 时,由 printReturn 来处理,即由最“近”的那个事件处理
为一个 instance 绑定一个事件
instance 的 bind 方法
代码:
import tkinter as tk root = tk.Tk() # Key 事件处理函数 def printEvent(event): print('<Key>',event.keycode) # Return 事件处理函数 def printReturn(event): print('<Return>',event.keycode) # 使用 bt1来添加一个事件处理函数。 bt1 = tk.Button(root,text = 'instance event') bt1.bind('<Key>', printEvent) bt1.focus_set() bt1.grid() root.mainloop()
结果:
当按键时,程序调用一次 printEvent
事件各个级别音传递
事件级别间”传递"
代码:
import tkinter as tk root = tk.Tk() # Key 事件处理函数 def printEvent(event): print('<instance>',event.keycode) # Return 事件处理函数 def printToplevel(event): print('<toplevel>',event.keycode) def printClass(event): print('<bind_class>',event.keycode) def printAppAll(event): print('<bind_all>',event.keycode) # 在 instance 级别与 printEvent 绑定 bt1 = tk.Button(root,text = 'instance event') bt1.bind('<Return>',printEvent) # 在 bt1的 Toplevel 级别与 printToplevel 绑定 bt1.winfo_toplevel().bind('<Return>',printToplevel) # 在 class 级别绑定事件 printClass root.bind_class('Button','<Return>',printClass) # 在 application all 级别绑定 printAppAll bt1.bind_all('<Return>',printAppAll) # 将焦点定位到 bt1上,回车一下,结果有4个打印输出。 bt1.focus_set() bt1.grid() root.mainloop()
结果:
Return 向高级别进行了“传递",调用顺序为 instance/class/toplevel/all
使用 bind_class 的后果
使用 bind_class 将影响所有这个类的 instance
代码:
import tkinter as tk root = tk.Tk() def printClass(event): print('<bind_class>',event.keycode) # 改变 button 类的事件绑定 root.bind_class('Button','<Return>',printClass) # 创建两个 Button bt1 = tk.Button(root,text = 'a button') bt2 = tk.Button(root,text = 'another button') bt1.focus_set() bt1.grid() bt2.grid() root.mainloop()
结果:
回车,bt1打印结果
TAB 切换到 bt2,回车同样打印出结果,即所有的 Button 对 Return 事件进行响应
使用 protocol 绑定
使用 protocol 与 WM 交互
代码:
import tkinter as tk root = tk.Tk() def printProtocol(): print('WM_DELETE_WINDOW') root.destroy() # 使用 protocol 将 WM_DELETE_WINDOW 与 printProtocol 绑定 root.protocol('WM_DELETE_WINDOW', printProtocol) root.mainloop()
结果:
程序在退出时打印'WM_DELETE_WINDOW'
上一篇: tkinter -- Event(2)
下一篇: tkinter实例
47604
45981
36909
34467
29079
25713
24565
19714
19245
17756
5564°
6155°
5690°
5737°
6703°
5482°
5484°
5988°
5965°
7295°