lambda函数在Tkinter中的一个应用

来源:互联网 发布:mysql 查看阻塞 编辑:程序博客网 时间:2024/06/17 02:19

一直不太了解Python中lambda函数的作用。最近要获取Tkinter中的输入数据,发现了lambda的一个妙用。
我用Tkinter来生成一个GUI界面。在其中的Text控件中输入数据,点击Send按钮后,获取输入数据到一个deque中。界面如下:
这里写图片描述

在createWidgets函数中生成TextBox跟Send按钮:

def createWidgets(self):    self.msgBox = tk.Text(self)    self.msgBox.grid(row=0)    self.sendButton = tk.Button(self, text='Send')    self.sendButton.grid(row=1)

我想通过点击Send按钮去触发文本框的取值,并放到一个deque中。于是写了一个取值函数,并意图bind到send按钮上的单击事件。

def sendButtonAction(self, event, msgQueue):    msg = self.msgBox.get("1.0", 'end-1c')      msgQueue.append(msg)

在绑定到Send按钮的时候遇到问题, 因为bind函数只接受方法类型的参数,如何将msgQueue这个参数传入sendButtonAction函数?一般使用bind(eventDescription, functionName) 这样的格式。如果用第二个参数写成functionName(parameters) 那么调用的就不是一个方法了,而是方法的执行结果。
幸好有lambda表达式,因为它实现的是一个方法。所以在createWidgets函数中这样实现bind。

    self.sendButton.bind('<Button-1>', lambda event, msgQueue=self.msgQueue: self.sendButtonAction(event, msgQueue))

通过这个实现加深了对lambda的了解。相信后面的开发过程中还会用到这个神奇的表达式。

原创粉丝点击