20

ボタンをクリックしたときに複数の機能を実行したい。たとえば、ボタンを次のように見せたい

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

このステートメントを実行すると、何かを引数に 2 回割り当てることができないため、エラーが発生します。コマンドに複数の機能を実行させるにはどうすればよいですか。

4

9 に答える 9

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

これにはラムダを使用できます。

self.testButton = Button(self, text = "test", lambda: [f() for f in [func1, funct2]])
于 2017-01-11T11:16:18.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と同じように2番目の変数の名前を変更b1し、ソリューションで最初のボタンテキストを削除することでした(したがって、2番目のみが表示され、単一のものとして機能します)。

関数ソリューションも試しましたが、あいまいな理由でうまくいきません。

于 2019-02-06T16:29:47.930 に答える