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

胡金庫 2023年1月30日
  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) `
)
著者: 胡金庫
胡金庫 avatar 胡金庫 avatar

DelftStack.comの創設者です。Jinku はロボティクスと自動車産業で8年以上働いています。自動テスト、リモートサーバーからのデータ収集、耐久テストからのレポート作成が必要となったとき、彼はコーディングスキルを磨きました。彼は電気/電子工学のバックグラウンドを持っていますが、組み込みエレクトロニクス、組み込みプログラミング、フロントエンド/バックエンドプログラミングへの関心を広げています。

LinkedIn Facebook

関連記事 - Tkinter Button