Tkinter ボタンコマンドに引数を渡す方法

  1. 引数を partials 付きの Tkinter ボタンの command に渡す
  2. lambda 関数を使用して Tkinter ボタンコマンドにパラメータを渡します

Tkinter Button ウィジェットの command オプションは、ユーザーがボタンを押すとトリガーされます。いくつかのシナリオでは、添付のコマンド関数に引数を渡す必要がありますが、以下のような引数を単に渡すことはできません。

button = tk.Button(app, text="Press Me", command=action(args))

コマンド関数に引数を渡す 2つの方法を紹介します。

引数を partials 付きの Tkinter ボタンの command に渡す

functools モジュールの partial オブジェクトを使用してパラメータを渡すことができます。

from sys import version_info
if version_info.major == 2:
    import Tkinter as tk
elif version_info.major == 3:
    import tkinter as tk
    
from functools import partial
    

    
app = tk.Tk()
labelExample = tk.Button(app, text="0")

def change_label_number(num):
    counter = int(str(labelExample['text']))
    counter += num
    labelExample.config(text=str(counter))
    
buttonExample = tk.Button(app, text="Increase", width=30,
                          command=partial(change_label_number, 2))

buttonExample.pack()
labelExample.pack()
app.mainloop()
buttonExample = tk.Button(app, text="Increase", width=30,
                          command=partial(change_label_number, 2))

partial(change_label_numer, 2) は呼び出し可能なオブジェクトを返し、参照時に関数 func に似ています。

lambda 関数を使用して Tkinter ボタンコマンドにパラメータを渡します

Python の lambda キーワードを使って、ボタンが押されたときに呼び出す一時的で使い捨ての簡単な関数を作成することもできます

from sys import version_info
if version_info.major == 2:
    import Tkinter as tk
elif version_info.major == 3:
    import tkinter as tk
    

    
app = tk.Tk()
labelExample = tk.Button(app, text="0")

def change_label_number(num):
    counter = int(str(labelExample['text']))
    counter += num
    labelExample.config(text=str(counter))
    
buttonExample = tk.Button(app, text="Increase", width=30,
                          command=lambda: change_label_number(2))

buttonExample.pack()
labelExample.pack()
app.mainloop()

lambda 関数の構文は

lambda: argument_list: expression

この例では引数は不要です。したがって、引数リストを空のままにして、式のみを記述できます。

buttonExample = tk.Button(app, text="Increase", width=30,
                          command=lambda: change_label_number(2))

具体的には、lamda 関数でパラメータを伝達する文は

python buttonExample = tk.Button(app, text="Increase", width=30, command=lambda: `change_label_number(2)`)

関連記事 - Tkinter Button

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