Tkinter教程之Event篇

来源:互联网 发布:python神经网络入门 编辑:程序博客网 时间:2024/05/17 19:58

'''Tkinter教程之Event篇(1)'''
# 事件的使用方法
'''1.测试鼠标点击(Click)事件'''
# -*- coding: cp936 -*-
#
<Button-1>:鼠标左击事件
#
<Button-2>:鼠标中击事件
#
<Button-3>:鼠标右击事件
#
<Double-Button-1>:双击事件
#
<Triple-Button-1>:三击事件
from Tkinterimport *
root
= Tk()
def printCoords(event):
   
print event.x,event.y
# 创建第一个Button,并将它与左键事件绑定
bt1= Button(root,text= 'leftmost button')
bt1.bind(
'<Button-1>',printCoords)

# 创建二个Button,并将它与中键事件绑定
bt2= Button(root,text= 'middle button')
bt2.bind(
'<Button-2>',printCoords)

# 创建第三个Button,并将它与右击事件绑定
bt3= Button(root,text= 'rightmost button')
bt3.bind(
'<Button-3>',printCoords)

# 创建第四个Button,并将它与双击事件绑定
bt4= Button(root,text= 'double click')
bt4.bind(
'<Double-Button-1>',printCoords)

# 创建第五个Button,并将它与三击事件绑定
bt5= Button(root, text= 'triple click')
bt5.bind(
'<Triple-Button-1>',printCoords)

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

root.mainloop()
# 分别测试鼠标的事件,回调函数的参数event中(x,y)表示当前点击的坐标值
'''2.测试鼠标的移动(Motion)事件'''
# -*- coding: cp936 -*-
#
<Bx-Motion>:鼠标移动事件,x=[1,2,3]分别表示左、中、右鼠标操作。
from Tkinterimport *
root
= Tk()
def printCoords(event):
   
print event.x,event.y
# 创建第一个Button,并将它与左键移动事件绑定
bt1= Button(root,text= 'leftmost button')
bt1.bind(
'<B1-Motion>',printCoords)

# 创建二个Button,并将它与中键移动事件绑定
bt2= Button(root,text= 'middle button')
bt2.bind(
'<B2-Motion>',printCoords)

# 创建第三个Button,并将它与右击移动事件绑定
bt3= Button(root,text= 'rightmost button')
bt3.bind(
'<B3-Motion>',printCoords)


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

root.mainloop()
# 分别测试鼠标的移动事件,只有当鼠标被按下后移动才回产生事件
'''3.测试鼠标的释放(Relase)事件'''
# -*- coding: cp936 -*-
#
<ButtonRelease-x>鼠标释放事件,x=[1,2,3],分别表示鼠标的左、中、右键操作
from Tkinterimport *
root
= Tk()
def printCoords(event):
   
print event.x,event.y
# 创建第一个Button,并将它与左键释放事件绑定
bt1= Button(root,text= 'leftmost button')
bt1.bind(
'<ButtonRelease-1>',printCoords)

# 创建二个Button,并将它与中键释放事件绑定
bt2= Button(root,text= 'middle button')
bt2.bind(
'<ButtonRelease-2>',printCoords)

# 创建第三个Button,并将它与右击释放事件绑定
bt3= Button(root,text= 'rightmost button')
bt3.bind(
'<ButtonRelease-3>',printCoords)


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

root.mainloop()
# 分别测试鼠标的Relase事件,只有当鼠标被Relase后移动才回产生Relase事件
'''4.进入(Enter)事件'''
# -*- coding: cp936 -*-
#
<Enter>:鼠标释放事件
from Tkinterimport *
root
= Tk()
def printCoords(event):
   
print event.x,event.y
# 创建第一个Button,并将它与Enter事件绑定
bt1= Button(root,text= 'leftmost button')
bt1.bind(
'<Enter>',printCoords)

bt1.grid()

root.mainloop()
# 分别测试Enter事件,只是在第一次进入进回产生事件,在组件中移动不会产生Enter事件。

'''Tkinter教程之Event篇(2)'''
'''5.测试离开(Leave)事件'''
# -*- coding: cp936 -*-
#
leave:鼠标离开时产生此事件
from Tkinterimport *
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 Tkinterimport *
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 Tkinterimport *
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 Tkinterimport *
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 Tkinterimport *
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 Tkinterimport *
root
= Tk()
def printSize(event):
   
print (event.width,event.height)
root.bind(
'<Configure>',printSize)

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

'''Tkinter教程之Event篇(3)'''
'''11.两个事件同时绑定到一个控件'''
# -*- coding: cp936 -*-
#
bind:将事件与处理函数
#
将两个事件绑定为同一个组件
#
为root绑定两个事件
from Tkinterimport *
root
= Tk()
# 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来处理,即由最“近”的那个事件处理。
'''12.为一个instance绑定一个事件。'''
# bind:绑定instance的事件处理函数
#
-*- coding: cp936 -*-
from Tkinterimport *
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 Tkinterimport *
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 Tkinterimport *
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 Tkinterimport *
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'