TKinter提供两种方法实现事件的绑定:使用command属性绑定事件处理函数,使用bind方法绑定事件处理函数!
Tkinter事件绑定
Tkinter事件处理
TKinter提供两种方法实现事件的绑定
- 通过command属性绑定事件处理函数
- 通过bind方法绑定事件处理函数
通过command属性绑定事件处理函数
事件处理可通过组件对象的command属性实现,该对象command属性需要绑定一个事件处理函数,当用户有点击事件时,会触发command绑定的事件处理函数执行。
对应示例使用
# -*- coding:utf-8 -*-from tkinter import Tk, Label, Buttonimport randomclass App(object): def __init__(self, mw): self.mw = mw self.initWidgets() def initWidgets(self): self.label = Label(self.mw, width=45) self.label['font'] = ('arial', 24) self.label['bg'] = '#326191' self.label['text'] = u'欢迎访问雷那网,一个有温度的Python兴趣屋' self.label.pack() # button按钮绑定事件函数 bn = Button(self.mw, text='改变内容', command=self.change) bn.pack() def change(self): """定义button事件处理函数""" msgs =[u'欢迎访问雷那网,一个有温度的Python兴趣屋',u'这里有Python教程',u'这里有网络爬虫教程',u'Python自动化测试工具使用'] self.label['text'] = msgs[random.randint(0, 3)]if __name__ == "__main__": mw = Tk() mw.title("TKinter事件处理") App(mw) mw.mainloop()
代码运行以后,点击改变内容,界面Label上的文本内容会发生变化
通过bind方法绑定事件处理函数
使用command属性绑定事件处理函数,有一定局限性:不能就具体事件(单击,双击、左击,还是具体按键事件)做出不同事件处理
这对这个问题,TKinter提供了bind() 方法,且所有组件都支持该方法,通过该方法可以将“任意” 事件绑定指定事件处理方法
# -*- coding:utf-8 -*-from tkinter import Tk, Label, Button,BOTH,YESimport randomclass App(object): def __init__(self, mw): self.mw = mw self.initWidgets() def initWidgets(self): self.Label = Label(self.mw, width=30, bg='#326191', font=('Arial', 24)) self.Label.pack() bn = Button(self.mw, text='请单击或双击') bn.pack(fill=BOTH, expand=YES) # 为单击事件绑定处理函数 bn.bind('', self.one) # 为双击事件绑定处理函数 bn.bind('', self.double) def one(self, event): self.Label['text'] = u"单击事件" def double(self, event): self.Label['text'] = u"双击事件"if __name__ == "__main__": mw = Tk() mw.title("TKinter事件处理") App(mw) mw.mainloop()
鼠标事件&按键事件
Tkinter 使用字符串表示鼠标按键事件,如 表示鼠标左键单击事件, 表示鼠标左键双击事件
Tkinter 响应事件包括:
- 鼠标单击事件
- 单击鼠标左键为
- 单击鼠标中键为
- 单击鼠标右键为
- 单击向上滚动的滚轮为
- 单击向下滚动的滚轮为
- 鼠标移动事件
- 按住鼠标左键移动为
- 锁住鼠杯中键移动为
- 按住鼠标右键移动为
- 鼠标释放事件
- 鼠标左键被释放为
- 鼠标中键被释放为
- 鼠标右键被释放为
- 鼠标双击事件 或
- 双击鼠标左键为
- 双击鼠标中键为
- 双击鼠标右键为
- 双击向上滚动的滚轮为
- 双击向下滚动的滚轮为
- 鼠标进入组件事件
- 鼠标移出组件事件
- 组件及其包含的子组件获得焦点
- 组件及其包含的子组件失去焦点
- 按下回车键的事件
- Cancel
- BackSpace
- Tab
- Return
- Shift_L(左Shift,如果只写 Shift 则代表任意 Shift)
- Control_L(左 Ctrl,如果只写 Control 则代表任意 Ctrl)
- Alt_L(左 Alt,如果只写 Alt 则代表任意 Alt)
- Pause
- Caps_Lock
- Escape
- Prior(Page Up)
- Next(Page Down)
- End、Home
- Left、Up、Right、Down
- Insert
- Delete
- F1、F2、F3、F4、F5、F6、F7、F8、F9、F10、F11、F12
- Num_Lock 和 Scroll_Lock
- 键盘上任意键的单击事件,程序可通过 event 获取用户单击了哪个键
- a 键盘上指定键被单击的事件。比如‘a’代表 a 键被单击,‘b’代表 b 键被单击,不要尖括号
- 在 Shift 键被按下时按 Up 键
- 组件大小、位置改变的事件。组件改变之后的大小、位置可通过 event 的 width、height、x、y属性获取
鼠标移动事件绑定使用示例
# -*- coding:utf-8 -*-from tkinter import Tk, Label, Button,BOTH,YESimport randomclass App(object): def __init__(self, mw): self.mw = mw self.initWidgets() def initWidgets(self): lb = Label(self.mw, width=40, height=3, bg='green', font=('Times', 20)) # 为鼠标移动绑定事件处理方法 lb.bind('', self.motion) # 为按住左键时的鼠标移动绑定事件处理方法 lb.bind('', self.press_motion) lb.pack() self.show = Label(self.mw, width=38, height=1, bg='white', font=('Courier New', 20)) self.show.pack() def motion(self, event): self.show['text'] = "鼠标移动到: (%s %s)" % (event.x, event.y) return def press_motion(self, event): self.show['text'] = "按住鼠标的位置为: (%s %s)" % (event.x, event.y) returnif __name__ == "__main__": mw = Tk() mw.title("鼠标移动事件") App(mw) mw.mainloop()