'''
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.keycode
root.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'
本文详细介绍了Python GUI库Tkinter中的事件绑定技术,包括如何为控件绑定多个事件处理函数、不同级别的事件处理顺序以及使用bind_class和protocol绑定事件的方法。
1986

被折叠的 条评论
为什么被折叠?



