PythonのGUI チェックボタンのイベントについて。
この記事の内容はコチラです
- チェックボタンの状態をボタンイベントで取得する
- tkinterの使い方を知る
今回は、Pythonでチェックボックス(チェックボタン)を動的に作成し、ボタンイベントと連携する方法を解説します。
ボタンをおしてチェックボタンのON/OFFを切り替える
PythonではGUIでチェックボタンやラベルやテキストボックスを配置することができます。ボタンを押したイベントでチェックボタンにチェックを入れたり外したり、チェックの状態を取得したりできます。
tkinter
PythonでGUIを操作するには、「tkinter」モジュールを使います。「tkinter」は「Tool Kit Interface」のことで、Python標準のGUIアプリケーションを作成するモジュールです。
チェックボタンの基本的な使い方はこちらを参照してください。
画面を作る
import tkinter # Tkクラス生成 tki = tkinter.Tk() # 画面サイズ tki.geometry('300x200') # 画面タイトル tki.title('チェックボタン')
画面作成の詳細はこちらを参照ください。
次にボタンを押して、チェックボタンをチェック済みにしたりチェックを外したりしてみます。完成イメージはこちら。
チェックボタンを動的に作成する
# チェックボタンのラベルをリスト化する chk_txt = ['Pythonを使用する','Javaを使用する','C#を使用する'] # チェックボックスON/OFFの状態 chk_bln = {} # チェックボタンを動的に作成して配置 for i in range(len(chk_txt)): chk_bln[i] = tkinter.BooleanVar() chk = tkinter.Checkbutton(tki, variable=chk_bln[i], text=chk_txt[i]) chk.place(x=50, y=30 + (i * 24))
ここでは3つのチェックボタンを動的に作成しました。
tkinter.BooleanVar
チェックボタンのチェック状態は「tkinter.BooleanVar」型で設定します。「tkinter.BooleanVar」型の変数「chk_bln」を用意し、3つのチェックボタンで使えるようにリストにします。そして変数「chk_bln」を「tkinter.Checkbutton」の「variable」にセットします。
これでチェックボタンを3つ作成し、それぞれのチェック状態を制御できる準備ができました。
クリックイベント関数
# ボタンクリックイベント(チェック有無をセット)
def btn_click(bln):
for i in range(len(chk_bln)):
chk_bln[i].set(bln)
ボタンがクリックされたときのイベント関数「btn_click」を作成しました。
setでチェックする
ここでは、動的に作成したチェックボタンを自動でチェックしたり、チェックを外します。「tkinter.BooleanVar」型の変数「chk_bln」を「set」することで、チェックの状態を変更できます。
チェックボタンにチェックを入れる・外す
- チェックする・・・~.set(True)
- チェックを外す・・・~.set(False)
関数「btn_click」が引数として「bln」を受け取り、これを「set」してチェックボタンのチェックを入れたり、外したりします。
ボタンイベント
# ボタン作成
btn = tkinter.Button(tki, text='ONにする', command=lambda:btn_click(True))
btn.place(x=80, y=170)
btn = tkinter.Button(tki, text='OFFにする', command=lambda:btn_click(False))
btn.place(x=150, y=170)
3つのチェックボタンのチェックをすべてチェックを入れるボタンとチェックを外すボタンを作成しました。
チェックボタンは「command」で関数「btn_click」を実行します。その際、引数として「True or False」を渡しています。
ボタンの詳細はこちらを参照してください。
lambdaで引数を渡す
ボタンのイベントは「command」で設定します。ここでは関数「btn_click」を呼び出します。通常であれば「command=btn_click」でいいのですが、ここでは引数を渡します。その場合は「lambda:」が必要になります。
「ONにする」ボタンをおすと、チェックボタンがすべてチェックされ、「OFFにする」ボタンを押すと、チェックボタンがすべてチェックが外れました。
全コード
これまでのコードをすべてまとめたものがこちらになります。
import tkinter
# Tkクラス生成
tki = tkinter.Tk()
# 画面サイズ
tki.geometry('300x200')
# 画面タイトル
tki.title('チェックボタン')
# チェックボタンのラベルをリスト化する
chk_txt = ['Pythonを使用する','Javaを使用する','C#を使用する']
# チェックボックスON/OFFの状態
chk_bln = {}
# チェックボタンを動的に作成して配置
for i in range(len(chk_txt)):
chk_bln[i] = tkinter.BooleanVar()
chk = tkinter.Checkbutton(tki, variable=chk_bln[i], text=chk_txt[i])
chk.place(x=50, y=30 + (i * 24))
# ボタンクリックイベント(チェック有無をセット)
def btn_click(bln):
for i in range(len(chk_bln)):
chk_bln[i].set(bln)
# ボタン作成
btn = tkinter.Button(tki, text='ONにする', command=lambda:btn_click(True))
btn.place(x=80, y=170)
btn = tkinter.Button(tki, text='OFFにする', command=lambda:btn_click(False))
btn.place(x=150, y=170)
Pythonで「tkinter」を使ってチェックボタンを動的に作成して、ボタンイベントと連携することができました。
参考ページ:https://docs.python.jp/3/library/tk.html
以上、Pythonで「tkinter」を使ってチェックボタン(チェックボックス)を動的に作成しボタンイベントと連携する方法でした。
コメント