Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 您可以为Tkinter选项菜单分配多个命令吗?_Python 2.7_Tkinter - Fatal编程技术网

Python 2.7 您可以为Tkinter选项菜单分配多个命令吗?

Python 2.7 您可以为Tkinter选项菜单分配多个命令吗?,python-2.7,tkinter,Python 2.7,Tkinter,我有以下选项菜单: self.wcartsn = StringVar(self.frame1) self.e1 = OptionMenu(self.frame1, self.wcartsn, *watercarts, command=(self.wcart, lambda selection:self.other_entry(selection,'wcartsn',10,6)))

我有以下选项菜单:

    self.wcartsn = StringVar(self.frame1)                                                  
    self.e1 = OptionMenu(self.frame1, self.wcartsn, *watercarts, command=(self.wcart, lambda selection:self.other_entry(selection,'wcartsn',10,6)))   
    self.e1.grid(row=10, column=5, stick=E+W)

这实际上不起作用,但它清楚地说明了我的问题如何(如果可能)从一个选项菜单调用多个函数?此函数给出错误
TypeError:“tuple”对象不可调用

您可以创建一个函数,依次调用多个函数:

def compose(functions):
    """
    returns a single function composed from multiple functions.
    calling the returned function will execute each of the functions in the order you gave them.
    """
    def f(*args, **kargs):
        for function in functions:
            function(*args, **kargs)
    return f


self.e1 = OptionMenu(self.frame1, self.wcartsn, *watercarts, command=compose(self.wcart, lambda selection:self.other_entry(selection,'wcartsn',10,6)))   
最简单的解决方案——也是最容易维护的解决方案——是创建一个调用其他函数的函数:

def __init__(self):
    ...
    self.wcartsn = StringVar(self.frame1)                                                  
    self.e1 = OptionMenu(self.frame1, self.wcartsn, *watercarts, command=self.wcartsnCallback)   
    ...

def wcartsnCallback(self, selection):
    self.wcart()
    self.other_entry(selection,'wcartsn',10,6)