'''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'