複数のコマンドを Tkinter ボタンにバインドする方法

  1. 複数のコマンドを Tkinter ボタンにバインド
  2. 関数を 1つの単一関数に結合する

このチュートリアルでは、複数のコマンドを Tkinter ボタンにバインドする方法を説明ます。ボタンをクリックすると、複数のコマンドが実行されます。

複数のコマンドを Tkinter ボタンにバインド

Tkinter ボタンには command プロパティが 1つしかないため、複数のコマンドまたは関数を組み合わせて、この単一の関数をボタンの command にバインドする必要があります。

次のよう lambda に複数のコマンドを組み合わせて使用できます。

command=lambda:[funcA(), funcB(), funcC()]

この lambda 関数は、それぞれ funcAfuncB と、funcC を実行します。

labmda 複数のコマンドのバインドの例

try:
    import Tkinter as tk
except:
    import tkinter as tk
    

class Test():
   def __init__(self):
       self.root = tk.Tk()
       self.root.geometry('200x100')
       self.button = tk.Button(self.root,
                          text = 'Click Me',
                          command=lambda:[self.funcA(), self.funcB(), self.funcC()])
       self.button.pack()

       self.labelA = tk.Label(self.root, text="A")
       self.labelB = tk.Label(self.root, text="B")
       self.labelC = tk.Label(self.root, text="C")

       self.labelA.pack()
       self.labelB.pack()
       self.labelC.pack()
       
       self.root.mainloop()

   def funcA(self):
       self.labelA["text"] = "A responds"

   def funcB(self):
       self.labelB["text"] = "B responds"
   def funcC(self):
       self.labelC["text"] = "C responds"
       
app = Test()

[Tkinter は複数のコマンドをボタンにバインドします

関数を 1つの単一関数に結合する

   def combineFunc(self, *funcs):
       def combinedFunc(*args, **kwargs):
            for f in funcs:
                f(*args, **kwargs)
       return combinedFunc

上記の関数は、関数内の関数を定義し、関数オブジェクトを返します。

for f in funcs:
                f(*args, **kwargs)

関数 combineFunc の括弧内のすべての関数を実行します。

try:
    import Tkinter as tk
except:
    import tkinter as tk
    

class Test():
   def __init__(self):
       self.root = tk.Tk()
       self.root.geometry('200x100')
       self.button = tk.Button(self.root,
                          text = 'Click Me',
                          command = self.combineFunc(self.funcA, self.funcB, self.funcC))
       self.button.pack()

       self.labelA = tk.Label(self.root, text="A")
       self.labelB = tk.Label(self.root, text="B")
       self.labelC = tk.Label(self.root, text="C")

       self.labelA.pack()
       self.labelB.pack()
       self.labelC.pack()
       
       self.root.mainloop()

   def combineFunc(self, *funcs):
       def combinedFunc(*args, **kwargs):
            for f in funcs:
                f(*args, **kwargs)
       return combinedFunc

   def funcA(self):
       self.labelA["text"] = "A responds"

   def funcB(self):
       self.labelB["text"] = "B responds"

   def funcC(self):
       self.labelC["text"] = "C responds"
       
app = Test()

関連記事 - Tkinter Button

  • Tkinter ボタンコマンドに引数を渡す方法
  • ボタンを使って Tkinter ウィンドウを閉じる
  • Tkinter ボタンの状態を変更する方法
  • Tkinter のボタンをクリックして新しいウィンドウを作成する方法
  • comments powered by Disqus