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

Jinku Hu 2021年3月5日 2019年12月7日 Tkinter Tkinter Button
  1. 引数を partials 付きの Tkinter ボタンの command に渡す
  2. lambda 関数を使用して Tkinter ボタンコマンドにパラメータを渡する
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 関数でパラメータを伝達する文は

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

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn

関連記事 - Tkinter Button

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