Python 向tkinter菜单添加一个函数,使其仅在x!=没有一个
我想在我的GUI上有一个菜单栏。在此菜单栏中,我希望有一个标签,单击此标签时,应检查用于处理的Python 向tkinter菜单添加一个函数,使其仅在x!=没有一个,python,tkinter,lambda,Python,Tkinter,Lambda,我想在我的GUI上有一个菜单栏。在此菜单栏中,我希望有一个标签,单击此标签时,应检查用于处理的文件\u数据\u的值。然后,根据它是否为真,将运行2个函数中的1个。我想在调用函数的同一语句中检查这一点 到目前为止,我得到的代码是: self.menu_main_top_evaluation.add_command(label=self.test_me, command=lambda: guif.run_test(self.test_me, self.file_data_for_proces
文件\u数据\u的值。然后,根据它是否为真,将运行2个函数中的1个。我想在调用函数的同一语句中检查这一点
到目前为止,我得到的代码是:
self.menu_main_top_evaluation.add_command(label=self.test_me,
command=lambda: guif.run_test(self.test_me, self.file_data_for_processing))
现在,我必须执行第三个函数,首先检查file\u data\u的值进行处理,然后根据结果选择要调用的函数。最好的方法是使用标准函数。lambda只有在必须向函数传递参数时才有用,而在这里不需要这样做。否则,lambda只会使卡更难编写、更难理解和调试。就我个人而言,我的经验法则是在绝对必须使用lambda(或其等价物,如functools.partial
)之前,永远不要使用lambda
首先,代码需要清晰易读。它的阅读方式比它的编写或修改方式更频繁,所以除非有令人信服的理由,否则您应该优化可读性
我会这样写代码:
class Something(...):
def __init__(self, ...):
...
self.menu_main_top_evaluation.add_command(
label=self.test_me, command=self._test_me
)
...
def _test_me(self):
if self.file_data_for_processing:
do_something()
else:
do_something_else()
注意:选择使用\uu
前缀纯粹是为了说明目的。前导下划线有助于说明这是一个类专用的函数,但您当然可以使用任何名称。提出一个对您有意义的命名约定是一个好主意,这样就可以很容易地记住哪些功能与哪些菜单项关联 把所有这些代码塞进lambda有什么意义?如果菜单项调用一个简单的命令,然后将所有逻辑放在该命令中,那么代码将更易于维护和调试。在这里使用lambda只会使代码更难理解。@BryanOakley好的。。。