Tkinter教程之Event篇(3)

时间:2022-02-24 16:24:24
'''Tkinter教程之Event篇(3)'''
'''11.两个事件同时绑定到一个控件'''
# -*- coding: utf-8 -*-
# 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: utf-8 -*-from tkinter import *root = Tk()# Key事件处理函数def printEvent(event):    print('<Key>', event.keycode)# 使用bt1来添加一个事件处理函数。bt1 = Button(root, text='instance event')bt1.bind('<Key>', printEvent)bt1.focus_set()bt1.grid()root.mainloop()# 当按键时,程序调用一次printEvent

'''13.事件各个级别音传递'''# -*- coding: utf-8 -*-# 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级别绑定事件printClassroot.bind_class('Button', '<Return>', printClass)# 在application all级别绑定printAppAllbt1.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: utf-8 -*-# bind_class:绑定整个类的事件处理函数,将影响所有这个类的instancefrom tkinter import *root = Tk()def printClass(event):    print('<bind_class>', event.keycode)# 改变button类的事件绑定root.bind_class('Button', '<Return>', printClass)# 创建两个Buttonbt1 = 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: utf-8 -*-# 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'