20

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

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

当我执行此语句时,我收到一个错误,因为我无法将某些东西分配给一个参数两次。如何使命令执行多个功能。

4

9 回答 9

53

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

self.testButton = Button(self, text=" test", command=lambda:[funct1(),funct2()])
于 2017-06-26T16:42:41.923 回答
30

您可以创建一个用于组合函数的通用函数,它可能看起来像这样:

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))
于 2012-12-13T17:23:29.673 回答
17
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())

但这真的很恶心......

于 2012-12-13T17:18:38.410 回答
5

您可以为此使用 lambda:

self.testButton = Button(self, text = "test", lambda: [f() for f in [func1, funct2]])
于 2017-01-11T11:16:18.917 回答
5

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

于 2017-11-30T10:43:41.157 回答
3

我认为使用 lambda 运行多个函数的最佳方式。

这里有一个例子:

button1 = Button(window,text="Run", command = lambda:[fun1(),fun2(),fun3()])
于 2020-08-15T06:15:38.917 回答
1

我也发现了这个,它对我有用。在这样的情况下...

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,并在解决方案中删除第一个按钮文本(因此只有第二个是可见的并且将作为一个单独的)。

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

于 2019-02-06T16:29:47.930 回答
1

这是一个简短的示例:按下下一个按钮时,它将在 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()
于 2019-07-03T11:16:38.370 回答
0

看看这个,我试过这个方法,我也遇到了同样的问题。这对我有用。

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

self.testButton = Button(self, text = "test", command = all)
于 2021-06-11T20:20:16.097 回答