按下按钮时有多个命令

时间:2012-12-13 17:15:20

标签: python python-2.7 button tkinter command

我想点击按钮时运行多个功能。例如,我希望我的按钮看起来像

self.testButton = Button(self, text = "test", 
                         command = func1(), command = func2())

当我执行这个语句时,我收到一个错误,因为我不能两次为一个参数分配一些东西。如何让命令执行多个函数。

9 个答案:

答案 0 :(得分:22)

您可以创建一个用于组合函数的通用函数,它可能如下所示:

def combine_funcs(*funcs):
    def combined_func(*args, **kwargs):
        for f in funcs:
            f(*args, **kwargs)
    return combined_func

然后你可以像这样创建你的按钮:

self.testButton = Button(self, text = "test", 
                         command = combine_funcs(func1, func2))

答案 1 :(得分:13)

def func1(evt=None):
    do_something1()
    do_something2()
    ...

self.testButton = Button(self, text = "test", 
                         command = func1)

可能?

我想也许你可以做点像

self.testButton = Button(self, text = "test", 
                         command = lambda x:func1() & func2())

但这真的很糟糕......

答案 2 :(得分:12)

您可以像这样简单地使用lambda:

self.testButton = Button(self, text=" test", command=lambda:[funct1(),funct2()])

答案 3 :(得分:2)

Button(self, text="text", command=func_1()and func_2)

答案 4 :(得分:1)

你可以使用lambda:

self.testButton = Button(self, text = "test", lambda: [f() for f in [func1, funct2]])

答案 5 :(得分:0)

我也找到了它,它对我有用。在类似...的情况下

b1 = Button(master, text='FirstC', command=firstCommand)
b1.pack(side=LEFT, padx=5, pady=15)

b2 = Button(master, text='SecondC', command=secondCommand)
b2.pack(side=LEFT, padx=5, pady=10)

master.mainloop()

...你可以做...

b1 = Button(master, command=firstCommand)
b1 = Button(master, text='SecondC', command=secondCommand)
b1.pack(side=LEFT, padx=5, pady=15)

master.mainloop()

我所做的只是将第二个变量b2重命名为与第一个b1相同,并在解决方案中删除了第一个按钮文本(因此仅第二个按钮可见,并且将用作一个)。

我也尝试了函数解决方案,但是由于一个晦涩的原因,它对我不起作用。

答案 6 :(得分:0)

这是一个简短的示例:按下下一个按钮时,它将在1个命令选项中执行2个功能

    from tkinter import *
    window=Tk()
    v=StringVar()
    def create_window():
           next_window=Tk()
           next_window.mainloop()

    def To_the_nextwindow():
        v.set("next window")
        create_window()
   label=Label(window,textvariable=v)
   NextButton=Button(window,text="Next",command=To_the_nextwindow)

   label.pack()
   NextButton.pack()
   window.mainloop()

答案 7 :(得分:0)

我认为使用lambda来运行多个功能的最佳方法。

这里是一个示例:

button1 = Button(window,text="Run", command = lambda:[fun1(),fun2(),fun3()])

答案 8 :(得分:0)

检查一下,我已经尝试过这种方法,因为我遇到了同样的问题。这对我有用。

def all():
    func1():
        opeartion
    funct2():
        opeartion
    for i in range(1):
        func1()
        func2()

self.testButton = Button(self, text = "test", command = all)