''' 
Tkinter教程之Event篇(2) 
''' 

 
''' 
5.测试离开(Leave)事件 
''' 

 
# 
 -*- coding: cp936 -*- 

# 
 leave:鼠标离开时产生此事件 

 
from 
 Tkinter  
import 
  
* 

root  
= 
 Tk()
 
def 
 printCoords(event):
     
print 
 event.x,event.y
 
# 
 创建第一个Button,并将它与Enter事件绑定 

 
bt1  
= 
 Button(root,text  
= 
  
' 
leftmost button 
' 
)
bt1.bind( 
' 
<Leave> 
' 
,printCoords)

bt1.grid()

root.mainloop()
 
# 
 分别测试Leave事件,只是在离开组件是会产生此事件。 

 
''' 
6.响应特殊键(Special Key) 
''' 

 
# 
 -*- coding: cp936 -*- 

# 
 键盘特殊键事件 

 
from 
 Tkinter  
import 
  
* 

root  
= 
 Tk()
 
def 
 printCoords(event):
     
print 
  
' 
event.char =  
' 
,event.char
     
print 
  
' 
event.keycode =  
' 
,event.keycode
 
# 
 创建第一个Button,并将它与BackSpace键绑定 

 
bt1  
= 
 Button(root,text  
= 
  
' 
Press BackSpace 
' 
)
bt1.bind( 
' 
<BackSpace> 
' 
,printCoords)

 
# 
 创建二个Button,并将它与回车键绑定 

 
bt2  
= 
 Button(root,text  
= 
  
' 
Press Enter 
' 
)
bt2.bind( 
' 
<Return> 
' 
,printCoords)

 
# 
 创建第三个Button,并将它与F5键绑定 

 
bt3  
= 
 Button(root,text  
= 
  
' 
F5 
' 
)
bt3.bind( 
' 
<F5> 
' 
,printCoords)

 
# 
 创建第4个Button,并将它与左Shift键绑定,与参考上说法一致 

 
bt4  
= 
 Button(root,text  
= 
  
' 
Left Shift 
' 
)
bt4.bind( 
' 
<Shift_L> 
' 
,printCoords)

 
# 
 创建第5个Button,并将它与右Shift键绑定,与参考上说法一致 

 
bt5  
= 
 Button(root,text  
= 
  
' 
Right Shift 
' 
)
bt5.bind( 
' 
<Shift_R> 
' 
,printCoords)


 
# 
 将焦点设置到第1个Button上 

 
bt1.focus_set()
bt1.grid()
bt2.grid()
bt3.grid()
bt4.grid()
bt5.grid()

root.mainloop()
 
# 
 各个组件间焦点的切换可以使用TAB键。 

# 
 特殊键    Cancel/Break/BackSpace/Tab/Return/Sift_L/Shift_R/Control_L/Control_R/Alt_L/Alt_R/Pause 

# 
        Caps_Loack/Escape/Prior(Page Up)/Next(Page Down)/End/Home/Left/Up/Right/Down/Print/Insert/Delete/ 

# 
        F1-12/Num_Lock/Scroll_Lock 

# 
 这些键的char是不可打印的,可以使用event.keycode查看。 

 
''' 
7.响应所有的按键(Key)事件 
''' 

 
# 
 -*- coding: cp936 -*- 

# 
 Key:处理所有的键盘事件 

 
from 
 Tkinter  
import 
  
* 

root  
= 
 Tk()
 
def 
 printCoords(event):
     
print 
  
' 
event.char =  
' 
,event.char
     
print 
  
' 
event.keycode =  
' 
,event.keycode
 
# 
 创建第一个Button,并将它与Key键绑定 

 
bt1  
= 
 Button(root,text  
= 
  
' 
Press BackSpace 
' 
)
bt1.bind( 
' 
<Key> 
' 
,printCoords)

 
# 
 将焦点设置到第1个Button上 

 
bt1.focus_set()
bt1.grid()

root.mainloop()
 
# 
 处理所有的按键事件,如果是上例的特殊键,event.char返回为空;其它情况下为这个键的值。 

# 
 如果输入大写字母(即上档键值),按下Shift键时就会有Key的事件触发。即回将用两次:一次为Shift本身,另一次为Shift+ Kye的实际键值。 

 
''' 
8.只处理指定的按键消息 
''' 

 
# 
 -*- coding: cp936 -*- 

# 
 a:只处理指定的按键消息 

 
from 
 Tkinter  
import 
  
* 

root  
= 
 Tk()
 
def 
 printCoords(event):
     
print 
  
' 
event.char =  
' 
,event.char
     
print 
  
' 
event.keycode =  
' 
,event.keycode
 
# 
 创建第一个Button,并将它与键'a'绑定 

 
bt1  
= 
 Button(root,text  
= 
  
' 
Press BackSpace 
' 
)
bt1.bind( 
' 
a 
' 
,printCoords)

 
# 
 创建二个Button,并将它与按下spacebar是触发事件 

 
bt2  
= 
 Button(root,text  
= 
  
' 
Press spacebar 
' 
)
bt2.bind( 
' 
<space> 
' 
,printCoords)

 
# 
 创建第三个Button,并将它与'<'键绑定 

 
bt3  
= 
 Button(root,text  
= 
  
' 
less than key 
' 
)
bt3.bind( 
' 
<less> 
' 
,printCoords)

 
# 
 将焦点设置到第1个Button上 

 
bt1.focus_set()

bt1.grid()
bt2.grid()
bt3.grid()

root.mainloop()
 
# 
 一般的按键直接使用就可以了,这样书写'key',不是'<key>'; 

# 
 但有两个需要特别注意:空格与小于的处理,使用方式为'<space>和<less> 

 
''' 
9.使用组合键响应事件 
''' 

 
# 
 -*- coding: cp936 -*- 

# 
 组合键(Control/Alt/Shift) 

 
from 
 Tkinter  
import 
  
* 

root  
= 
 Tk()
 
def 
 printCoords(event):
     
print 
  
' 
event.char =  
' 
,event.char
     
print 
  
' 
event.keycode =  
' 
,event.keycode
 
# 
 创建第一个Button,并将它与键Shift - Up绑定 

 
bt1  
= 
 Button(root,text  
= 
  
' 
Press Shift - Up 
' 
)
bt1.bind( 
' 
<Shift-Up> 
' 
,printCoords)

 
# 
 创建二个Button,并将它与按下Control-Alt-a时触发事件 

 
bt2  
= 
 Button(root,text  
= 
  
' 
Control-Alt-a 
' 
)
bt2.bind( 
' 
<Control-Alt-a> 
' 
,printCoords)

 
# 
 下面的按键处理将无法接受 

# 
 创建第三个Button,并将它与'Control-Alt'键绑定 

# 
 bt3 = Button(root,text = 'Control-Alt') 

# 
 bt3.bind('<Control-Alt>',printCoords) 

 


 
# 
 将焦点设置到第1个Button上 

 
bt1.focus_set()
bt1.grid()
bt2.grid()

root.mainloop()
 
# 
 使用Control/Alt/Shift与其它按键组合,但不能单独的使用Control/Alt组合。 

 
''' 
10.改变组件大小事件 
''' 

 
# 
 -*- coding: cp936 -*- 

# 
 configure:改变组件大小事件 

 
from 
 Tkinter  
import 
  
* 

root  
= 
 Tk()
 
def 
 printSize(event):
     
print 
 (event.width,event.height)
root.bind( 
' 
<Configure> 
' 
,printSize)

root.mainloop()
 
# 
 当组件的大小改变时触发。evnet.width/height分别返回改变后的宽度和高度。