Tkinter之Event篇
来源:互联网 发布:win10杀毒软件知乎 编辑:程序博客网 时间:2024/05/17 17:39
'''Created on 2017年9月1日@author: Nick'''#_*_coding:utf-8_*_import tkinter as tkfrom tkinter import *'''Tkinter之Event篇'''#1、测试鼠标点击(Click)事件# 分别测试鼠标的事件,回调函数的参数event中(x,y)表示当前点击的坐标值def printEvent(event): print(event.x) print(event.y) def printEvent_one(event): print('event.char = ',event.char) print('event.keycode = ',event.keycode) # 分别测试鼠标的事件,回调函数的参数event中改变后的宽和高def printSize(event): print('event.width = ',event.width) print('event.height = ',event.height) if __name__ == '__main__': root = tk.Tk() root.wm_title('Event') root.wm_minsize(400, 400)#设置窗口最小化大小 root.wm_maxsize(2800, 2800)#设置窗口最大化大小 root.resizable(width=True, height=True)#设置窗口宽度不可变,高度可变 fram1 = Frame(root) # <Button-1>:鼠标左击事件 bt1 = Button(root,text = '鼠标左击事件') bt1.bind('<Button-1>',printEvent) # <Button-2>:鼠标中击事件 bt2 = Button(root,text = '鼠标中击事件') bt2.bind('<Button-2>',printEvent) # <Button-3>:鼠标右击事件 bt3 = Button(root,text = '鼠标右击事件') bt3.bind('<Button-3>',printEvent) # <Double-Button-1>:双击事件 bt4 = Button(root,text = '鼠标双击事件') bt4.bind('<Double-Button-1>',printEvent) # <Triple-Button-1>:三击事件 bt5 = Button(root,text = '鼠标三击事件') bt5.bind('<Triple-Button-1>',printEvent) bt1.pack(side = LEFT) bt2.pack(side = LEFT) bt3.pack(side = LEFT) bt4.pack(side = LEFT) bt5.pack(side = LEFT) fram1.pack(side = TOP) #2、测试鼠标的移动(Motion)事件 # 分别测试鼠标的移动事件,只有当鼠标被按下后移动才回产生事件 fram2 = Frame(root) # <Bx-Motion>:鼠标移动事件,x=[1,2,3]分别表示左、中、右鼠标操作。 bt1 = Button(fram2,text = '左移') bt1.bind('<B1-Motion>',printEvent) bt2 = Button(fram2,text = '中移') bt2.bind('<B2-Motion>',printEvent) bt3 = Button(fram2,text = '右移') bt3.bind('<B3-Motion>',printEvent) bt1.pack(side = LEFT) bt2.pack(side = LEFT) bt3.pack(side = LEFT) fram2.pack(side = TOP) #3、测试鼠标的释放(Relase)事件 # 分别测试鼠标的Relase事件,只有当鼠标被Relase后移动才回产生Relase事件 fram3 = Frame(root) # <ButtonRelease-x>鼠标释放事件,x=[1,2,3],分别表示鼠标的左、中、右键操作 bt1 = Button(fram3,text = '左',fg = 'red') bt1.bind('<ButtonRelease-1>',printEvent) bt2 = Button(fram3,text = '中',fg = 'red') bt2.bind('<ButtonRelease-2>',printEvent) bt3 = Button(fram3,text = '右',fg = 'red') bt3.bind('<ButtonRelease-3>',printEvent) bt1.pack(side = LEFT) bt2.pack(side = LEFT) bt3.pack(side = LEFT) fram3.pack(side = TOP) #4、进入(Enter)事件 # 分别测试Enter事件,只是在第一次进入进回产生事件,在组件中移动不会产生Enter事件。 fram5 = Frame(root) # <Enter>:鼠标释放事件 bt1 = Button(fram5,text = 'Enter事件',fg = 'green',relief = 'solid') bt1.bind('<Enter>',printEvent) bt1.pack(side = LEFT) fram5.pack(side = TOP) #5、测试离开(Leave)事件 # 分别测试Leave事件,只是在离开组件是会产生此事件。 fram6 = Frame(root) # leave:鼠标离开时产生此事件 bt1 = Button(fram6,text = '离开事件',fg = 'blue',relief = 'ridge') bt1.bind('<Leave>',printEvent) bt1.pack(side = LEFT) fram6.pack(side = TOP) #6、响应特殊键(Special Key) # 键盘特殊键事件 # 各个组件间焦点的切换可以使用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查看。 fram7 = Frame(root) # 创建第一个Button,并将它与BackSpace键绑定 bt1 = Button(fram7,text = 'BackSpace事件',fg= 'red',relief = 'sunken') bt1.bind('<BackSpace>',printEvent_one) # 创建二个Button,并将它与回车键绑定 bt2 = Button(fram7,text = 'Press Enter',fg= 'red',relief = 'sunken') bt2.bind('<Return>',printEvent_one) # 创建第三个Button,并将它与F5键绑定 bt3 = Button(fram7,text = 'F5事件',fg = 'red',relief = 'groove') bt3.bind('<F5>',printEvent_one) # 创建第4个Button,并将它与左Shift键绑定,与参考上说法一致 bt4 = Button(fram7,text = '左 Shift事件',fg = 'red',relief = 'groove') bt4.bind('<Shift_L>',printEvent_one) # 创建第5个Button,并将它与右Shift键绑定,与参考上说法一致 bt5 = Button(fram7,text = '右 Shift+事件',fg = 'red',relief = 'groove') bt5.bind('<Shift_R>',printEvent_one) # 将焦点设置到第1个Button上 bt1.focus_set() bt1.pack(side = LEFT) bt2.pack(side = LEFT) bt3.pack(side = LEFT) bt4.pack(side = LEFT) bt5.pack(side = LEFT) fram7.pack(side = TOP) #7、响应所有的按键(Key)事件 # Key:处理所有的键盘事件 # 处理所有的按键事件,如果是上例的特殊键,event.char返回为空;其它情况下为这个键的值。 # 如果输入大写字母(即上档键值),按下Shift键时就会有Key的事件触发。即回将用两次:一次为Shift本身,另一次为Shift+ Kye的实际键值。 fram8 = Frame(root) bt1 = Button(fram8,text = '所有键盘事件',fg = 'red',relief = 'groove') bt1.bind('<Key>',printEvent_one) bt1.focus_set() bt1.pack(side = LEFT) fram8.pack(side = TOP) #8、只处理指定的按键消息 # 一般的按键直接使用就可以了,这样书写'key',不是'<key>'; # 但有两个需要特别注意:空格与小于的处理,使用方式为'<space>和<less> fram9 = Frame(root) #a:只处理指定的按键消息 # 创建第一个Button,并将它与键'a'绑定 bt1 = Button(fram9,text = 'Press BackSpace',fg = 'blue',relief = 'groove') bt1.bind('a',printEvent_one) # 创建二个Button,并将它与按下spacebar是触发事件 bt2 = Button(fram9,text = 'Press Spacebar',fg = 'blue',relief = 'groove') bt2.bind('<space>',printEvent_one) # 创建第三个Button,并将它与'<'键绑定 bt3 = Button(fram9,text = 'less than key',fg = 'blue',relief = 'groove') bt4.bind('<less>',printEvent_one) # 将焦点设置到第1个Button上 bt1.focus_set() bt1.pack(side = LEFT) bt2.pack(side = LEFT) bt3.pack(side = LEFT) fram9.pack(side = TOP) #9、使用组合键响应事件 # 组合键(Control/Alt/Shift) # 使用Control/Alt/Shift与其它按键组合,但不能单独的使用Control/Alt组合。 fram10 = Frame(root) # 创建第一个Button,并将它与键Shift - Up绑定 bt1 = Button(fram10,text = 'Shift-up',fg = 'green',relief = 'groove') bt1.bind('<Shift-Up>',printEvent_one) # 创建二个Button,并将它与按下Control-Alt-a时触发事件 bt2 = Button(fram10,text = 'Control-Alt-x',fg = 'green',relief = 'groove') bt2.bind('<Control-Alt-x>',printEvent_one) # 将焦点设置到第1个Button上 bt1.focus_set() bt1.pack(side = LEFT) bt2.pack(side = LEFT)# bt3.pack(side = LEFT) fram10.pack(side = TOP) #10、改变组件大小事件 # configure:改变组件大小事件 # 当组件的大小改变时触发。evnet.width/height分别返回改变后的宽度和高度。 fram11 = Frame(root) bt1 = Button(fram11,text = '改变组件大小',width = 10,height = 8,fg = 'red',relief = 'groove') bt1.bind('<Configure>',printSize) bt1.pack(side = LEFT) fram11.pack(side = TOP) #11、两个事件同时绑定到一个控件 # bind:将事件与处理函数 # 将两个事件绑定为同一个组件 # 为Button绑定两个事件 fram12 = Frame(root) bt1 = Button(fram12,text = '两个事件',fg = 'blue',relief = 'groove') # 当按键除了Return之外,都是由printSize来处理 # 当按键为Return时,由printEvent_one来处理,即由最“近”的那个事件处理。 bt1.bind('<Key>',printSize) bt1.bind('<Return>',printEvent_one) # 将焦点设置到第1个Button上 bt1.focus_set() bt1.pack(side = LEFT) fram12.pack(side = TOP) #13、事件各个级别音传递 # bind:绑定instance与toplevel # bind_class:绑定类处理函数 # bind_all:绑定应用所有事件 # 事件级别间”传递",Return向高级别进行了“传递",调用顺序为instance/class/toplevel/all fram13 = Frame(root) 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(fram13,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.pack(side = LEFT) fram13.pack(side = TOP) #14、使用bind_class的后果 # bind_class:绑定整个类的事件处理函数,将影响所有这个类的instance fram14 = Frame(root) def printClass(event): print('<bind_class>',event.keycode) # 改变button类的事件绑定 root.bind_class('Button','<Return>',printClass) # 创建两个Button bt1 = Button(fram14,text = 'a button',fg = 'blue',relief = 'groove') bt2 = Button(fram14,text = 'another button',fg = 'blue',relief = 'groove') bt1.focus_set() bt1.pack(side = LEFT) bt2.pack(side = LEFT) fram14.pack(side = TOP) #15、使用protocal绑定 # protocol:与WM交互,绑定事件处理函数。 def printProtocol(): print('WM_DELETE_WINDOW') root.destroy() # 使用protocol将WM_DELETE_WINDOW与printProtocol绑定 # 程序在退出时打印'WM_DELETE_WINDOW' root.protocol('WM_DELETE_WINDOW',printProtocol) root.mainloop()
阅读全文
0 0
- Tkinter之Event篇
- Tkinter教程之Event篇
- Tkinter教程之Event篇(1)'
- Tkinter教程之Event篇(2)
- Tkinter教程之Event篇(3)
- '''Tkinter教程之Event篇(1)'''
- Python Tkinter教程之Event篇(1)
- Python Tkinter教程之Event篇(2)
- Python Tkinter教程之Event篇(3)
- Tkinter教程之Event篇(1)
- Tkinter教程之Event篇(2)
- Tkinter教程之Event篇(3)
- Tkinter教程之Event篇(3)
- Tkinter教程之Event篇(2)
- 小白学tkinter(事件之(Event对象))
- Tkinter之Canvas篇
- Tkinter之Pack篇
- Tkinter之Entry篇
- Java实现验证码的制作
- android studio 汉化包 美化包
- Xamarin Studio
- 数据结构与算法(3)---Java语言实现:栈的单链表定义
- SQL优化之四两拨千金
- Tkinter之Event篇
- 浏览器兼容性总结以及处理
- IIS 部署遇到的问题记录
- Java Web学习总结49:简单模拟Sping MVC
- 用java调用R
- Oracle统计某一字段在不同值下的总数
- vs2010 下配置pcl cmake qt
- TCP拥塞控制
- Kaldi脚本分析(5)——自适应方法