tkinter中的命令何时使用lambda和callbacks

时间:2015-06-11 00:59:37

标签: python lambda tkinter command

我对在tkinter项目的命令中使用函数之间的区别感到困惑。说我有self.mb_BO.add_radiobutton(label= "Red", variable=self.BO, value=2, command=self.red) add语句的工作原理有何不同: self.mb_BO.add_radiobutton(label= "Red", variable=self.BO, value=2, command=self.red()) 其中func red(self)将颜色更改为红色。 并self.mb_BO.add_radiobutton(label= "Red", variable=self.BO, value=2, command=lambda: self.red())

基本上我不明白这些命令在做什么以及何时使用回调或函数引用。我花了几个小时在网上寻找一个易于理解的摘要无济于事,我仍然感到困惑。

2 个答案:

答案 0 :(得分:6)

command=self.red功能绑定到该窗口小部件。 command=self.red()将该函数的返回值绑定到该窗口小部件。您不希望您的小部件尝试调用数字或字符串 - 您希望它调用函数。如果您希望窗口小部件使用参数调用函数,那么您将使用lambda

command=lambda x=None: print('hello world')

答案 1 :(得分:2)

查看它的一个好方法是想象一下按钮或绑定,询问“单击按钮时应该调用什么命令?”。如果你给它类似self.red()的东西,你就不会告诉它要运行什么命令,你实际上是在运行命令。相反,您必须为其提供函数的名称(或更准确地说,引用)。

我推荐这个经验法则:永远不要使用lambda。像所有好的经验法则一样,它只适用于您必须提出的问题。一旦你明白为什么你应该避免使用lambda,只要它有意义就可以使用它。