Tkinter教程之Event篇(3)

'''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级别绑定事件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: utf-8 -*-
# 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: 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'

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值