''' Tkinter教程之Event篇(3) ''' ''' 11.两个事件同时绑定到一个控件 ''' # -*- coding: cp936 -*- # bind:将事件与处理函数 # 将两个事件绑定为同一个组件 # 为root绑定两个事件 from Tkinter import * root = Tk() # Key事件处理函数 def printEvent(event): print ' <Key> ' ,event.keycode # Return事件处理函数 def printReturn(event): print ' <Return> ' ,event.keycoderoot.bind( ' <Key> ' ,printEvent)root.bind( ' <Return> ' ,printReturn)root.mainloop() # 当按键除了Return之外,都是由printEvent来处理 # 当按键为Return时,由printReturn来处理,即由最“近”的那个事件处理。 ''' 12.为一个instance绑定一个事件。 ''' # bind:绑定instance的事件处理函数 # -*- coding: cp936 -*- from Tkinter import * root = Tk() # Key事件处理函数 def printEvent(event): print ' <Key> ' ,event.keycode # Return事件处理函数 def printReturn(event): print ' <Return> ' ,event.keycode # 使用bt1来添加一个事件处理函数。 bt1 = Button(root,text = ' instance event ' )bt1.bind( ' <Key> ' ,printEvent)bt1.focus_set()bt1.grid()root.mainloop() # 当按键时,程序调用一次printEvent ''' 13.事件各个级别音传递 ''' # -*- coding: cp936 -*- # bind:绑定instance与toplevel # bind_class:绑定类处理函数 # bind_all:绑定应用所有事件 # 事件级别间”传递" from Tkinter import * root = 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 = 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() # 输出结果: # <instance> 13 # <bind_class> 13 # <toplevel> 13 # <bind_all> 13 # Return向高级别进行了“传递",调用顺序为instance/class/toplevel/all ''' 14.使用bind_class的后果 ''' # -*- coding: cp936 -*- # bind_class:绑定整个类的事件处理函数,将影响所有这个类的instance from Tkinter import * root = Tk() def printClass(event): print ' <bind_class> ' ,event.keycode # 改变button类的事件绑定 root.bind_class( ' Button ' , ' <Return> ' ,printClass) # 创建两个Button bt1 = Button(root,text = ' a button ' )bt2 = Button(root,text = ' another button ' )bt1.focus_set()bt1.grid()bt2.grid()root.mainloop() # 回车,bt1打印结果 # TAB切换到bt2,回车同样打印出结果,即所有的Button对Return事件进行响应。 ''' 15.使用protocal绑定 ''' # -*- coding: cp936 -*- # protocol:与WM交互,绑定事件处理函数。 from Tkinter import * root = 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'