一般而言,与应用程序的交互是通过鼠标或者键盘操作来完成的。在tkinter中,通过将一个回调函数与具体键鼠事件绑定,从而在指令发生时,回调函数被自动调用,实现与tkinter窗口的交互。具体在tkinter中的组件,可以使用command属性来绑定一个具体的回调函数。步骤如下:
1、定义一个回调函数
2、将回调函数的名字赋值给组件中的command.
如下:
def button_clicked():
print('Button clicked')
ttk.Button(root, text='Click Me',command=button_clicked)
完整的可执行代码如下:
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
def button_clicked():
print('Button clicked')
button = ttk.Button(root, text='Click Me', command=button_clicked)
button.pack()
root.mainloop()
那么,如果需要给回调函数传参数怎么办呢?可以通过lambda匿名函数来实现。
1、定义带参回调函数
2、command绑定lambda函数
如下:
def callback_function(args):
# do something
ttk.Button(
root,
text='Button',
command=lambda: callback(args)
)
完整的可执行代码 :
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
def select(option):
print(option)
ttk.Button(root, text='Rock', command=lambda: select('Rock')).pack()
ttk.Button(root, text='Paper',command=lambda: select('Paper')).pack()
ttk.Button(root, text='Scissors', command=lambda: select('Scissors')).pack()
root.mainloop()
不过,command binding有如下一些限制。
1、不是所有的组件都可以command binding
2、command binding可以不能处理如return等一些键盘事件,有一定局限
那这个可以解决吗?当然,由此引申出了event binding。