ボタンをクリックしたときに複数の機能を実行したい。たとえば、ボタンを次のようにしたい
self.testButton = Button(self, text = "test",
command = func1(), command = func2())
このステートメントを実行すると、引数に何かを2回割り当てることができないため、エラーが発生します。コマンドに複数の機能を実行させるにはどうすればよいですか。
関数を組み合わせるための汎用関数を作成できます。次のようになります。
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))
次のように単純にラムダを使用できます:
self.testButton = Button(self, text=" test", command=lambda:[funct1(),funct2()])
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())
しかし、それは本当にひどいです...
Button(self, text="text", command=func_1()and func_2)
これにはラムダを使用できます:
self.testButton = Button(self, text = "test", lambda: [f() for f in [func1, funct2]])
これは短い例です。次のボタンを押すと、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()
これも見つけたので、うまくいきました。次のような状況では...
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つのボタンとして機能します)。
関数解も試してみましたが、あいまいな理由で機能しません。