Tkinter 事件与回调

来源:互联网 发布:vc电影数据库管理系统 编辑:程序博客网 时间:2024/06/05 19:00

代码访问GitHub: https://github.com/Roc-J/Python-turtle/tree/master/code16

  • 命令绑定 将简单的组件绑定到function函数上
  • 如果需要处理参数的话,使用lambda函数
  • 事件绑定可以使用 widget.bind(事件,回调)方法将键盘和鼠标的事件响应绑定到窗口小组件上,并在发生某些事件时调用回调的事件绑定。
  • 如何传递额外的参数到一个callback
  • 怎样将事件绑定到整个应用程序或特定类的窗口小部件(通过使用bind_all()和bind_class())

给程序添加生命

小部件功能响应函数 包括按下按钮,鼠标点击等事件,这需要将回调关联到特定事件。

命令绑定

最简单方式来增加函数方法到一个按钮称作command binding从而回调函数以command=some_callback形式提到窗口小部件

举一个简单的例子来进行简单的实例

def my_callback():    # do something Button(root,text="Click",command=my_callback())

传递参数到回调

如果回调需要一些参数,我们可以使用lambda函数:

def my_callback(somearg):    # do something with argumentButton(root,text="Click",command=lambda:my_callback('some argument'))

事件绑定

Tkinter提供一种称为bind()的事件绑定机制的替代形式来处理不同的事件,绑定事件的标准语法如下:

widget.bind(event,handler)
下面举一个例子来详细的说明

from Tkinter import *root = Tk()Label(root,text='Click at different \n locations in the frame below').pack()def callback(event):    print dir(event)    print "you clicked at",event.x,event.ymyframe = Frame(root,bg='khaki',width=130,height=80)myframe.bind("<Button-1>",callback)myframe.pack()root.mainloop()

程序说明:
(1)程序生成一个窗口root,pack()一个标签Label
(2)生成一个Frame放置在root上,并进行属性的设置,并将该frame绑定一个函数callback
(3)callback函数将显示event下的dir目录和输出一句话。

事件模式

  • 鼠标左击
  • 鼠标按钮中建点击
  • 鼠标右击
  • 键盘按键B
  • 键盘按下Alt+Ctrl+Delete

事件 属性说明
char 从键盘输入的字符,用于键事件
keycode 从键盘为键事件输入的键的键代码(即Unicode)
keysym 从键盘输入的键的键符号(即字符),用于键事件。
num 按钮编号(1,2,3)表示单击了哪个鼠标按钮。
widge 触发此事件的widget对象
x and y 窗口小部件中当前的鼠标位置(以像素为单位)
x__root and y__root 当前鼠标相对于屏幕上左上角的位置,以像素为单位

事件绑定的公共操作

widget.bind(“”,callback) # 将widget组件绑定到鼠标左击
widget.bind(“”,callback) # 绑定到鼠标右击
widget.bind(“”,callback) # 绑定到Return(Enter)Key
widget.bind(“”,callback) # 绑定Focus
widget.bind(“”,callback) # 绑定键盘A键
widget.bind(“”,callback) #绑定CapsLockkeysym
widget.bind(“”,callback) # 绑定widget到F1
widget.bind(“”,callback) #绑定keypad 数字5
widget.bind(“Motion”,callback) #bind to motion over widget
widget.bind(“”,callback) #绑定到任意键

绑定的级别

application-level binding

application-level绑定的语法是
w.bind_all(event,callback)
典型的使用如下:
root.bind_all(‘’,show_help)

class-level binding

class level绑定的语法是
w.bind_class(className,event,callback)

典型的使用如下:
myentry.bind_class(‘Entry’,’’,paste)

0 0
原创粉丝点击