tkinter 中的命令何时使用 lambda 和回调

commands in tkinter when to use lambda and callbacks

我对在 tkinter 项目的命令中使用函数之间的区别感到困惑。说我有 self.mb_BO.add_radiobutton(label= "Red", variable=self.BO, value=2, command=self.red) 添加语句的工作方式与此有什么区别: 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())

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

command=self.red 函数 绑定到该小部件。 command=self.red() 将该函数 的 return 值绑定到该小部件。你不希望你的小部件试图调用,比如说,一个数字或一个字符串——你希望它调用一个函数。如果您希望小部件调用带有参数的函数,那么您可以使用 lambda:

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

查看它的一个好方法是想象按钮或绑定向您提问 "what command should I call when the button is clicked?"。如果你给它类似 self.red() 的东西,你并没有告诉它要 运行 什么命令,你实际上是在 运行 命令。相反,您必须为其提供函数的 name(或更准确地说,reference)。

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