web-dev-qa-db-ja.com

ボタンが押されたときに複数のコマンドを使用する

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

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

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

13
user1876508

関数を組み合わせるための汎用関数を作成できます。次のようになります。

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))
26
Andrew Clark

次のように単純にラムダを使用できます:

self.testButton = Button(self, text=" test", command=lambda:[funct1(),funct2()])
27
pradepghr
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())

しかし、それは本当にひどいです...

14
Joran Beasley

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

2
chibbbb

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

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

これは短い例です。次のボタンを押すと、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()
0
Rahim Mazouz

これも見つけたので、うまくいきました。次のような状況では...

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()

私がしたことは、2番目の変数の名前をb2最初と同じb1およびソリューションで、最初のボタンのテキストを削除します(そのため、2番目のボタンのテキストのみが表示され、1つのボタンとして機能します)。

関数解も試してみましたが、あいまいな理由で機能しません。

0
Link