Tkinterでチェックボックス選択の判断をする方法

チェックが1つの場合の判断方法

Tkinterでチェックボックスの状態を判断するには、 IntVar 型の変数を使用します。以下は実例のコードです。

import tkinter as tk

def on_submit_button_click():
    if check_var.get() == 1:
        label.config(text="Checkbox is selected")
    else:
        label.config(text="Checkbox is not selected")

root = tk.Tk()
check_var = tk.IntVar()
checkbox = tk.Checkbutton(root, text="Check me", variable=check_var)
checkbox.pack()
button = tk.Button(root, text="Submit", command=on_submit_button_click)
button.pack()
label = tk.Label(root)
label.pack()
root.mainloop()

上記のコードでは、 check_var という IntVar 型の変数がチェックボックスの状態を保持しています。

選択されている場合は 1、選択されていない場合は 0 となります。

on_submit_button_click 関数内で、 check_var.get() メソッドを使用して check_var の値を取得し、チェックボックスが選択されているか判断しています。
その上で、label.config(text="Checkbox is selected") または label.config(text="Checkbox is not selected") のいずれかを呼び出し、ラベルに表示する文字列を変更しています。

チェックが2つの場合の判断方法

複数のチェックボックスがある場合、各チェックボックスに対して別の変数を作成し、それぞれにIntVarを割り当てることで取得することができます。

以下は、2つのチェックボックスがあり、それぞれが選択されたかどうかを判定して、その結果を表示するサンプルコードです。

import tkinter as tk

def on_submit_button_click():
    if var1.get() == 1:
        result_text += "Option 1 is selected.\n"
    if var2.get() == 1:
        result_text += "Option 2 is selected.\n"
    label.config(text=result_text)

root = tk.Tk()
var1 = tk.IntVar()
check_box_1 = tk.Checkbutton(root, text="Option 1", variable=var1)
check_box_1.pack()
var2 = tk.IntVar()
check_box_2 = tk.Checkbutton(root, text="Option 2", variable=var2)
check_box_2.pack()
button = tk.Button(root, text="Submit", command=on_submit_button_click)
button.pack()
label = tk.Label(root)
label.pack()
root.mainloop()

チェックが3つ以上で判定したい場合

複数のチェックボックスを使って複数の条件で判定するには、各チェックボックスの状態を変数に格納し、それらを使って判定を行います。

以下は、3つのチェックボックスの状態を変数checkbox1, checkbox2, checkbox3に格納し、それらを使って判定するサンプルコードです。

scssCopy codeimport tkinter as tk

def on_submit_button_click():
    if checkbox1.get() == 1 and checkbox2.get() == 1 and checkbox3.get() == 0:
        label.config(text="Conditions 1, 2 are checked, 3 is not checked")
    elif checkbox1.get() == 1 and checkbox2.get() == 0 and checkbox3.get() == 1:
        label.config(text="Conditions 1, 3 are checked, 2 is not checked")
    elif checkbox1.get() == 0 and checkbox2.get() == 1 and checkbox3.get() == 1:
        label.config(text="Conditions 2, 3 are checked, 1 is not checked")
    elif checkbox1.get() == 1 and checkbox2.get() == 1 and checkbox3.get() == 1:
        label.config(text="Conditions 1, 2, 3 are checked")
    else:
        label.config(text="None of the conditions are checked")

root = tk.Tk()
checkbox1 = tk.IntVar()
checkbox2 = tk.IntVar()
checkbox3 = tk.IntVar()
tk.Checkbutton(root, text="Option 1", variable=checkbox1).pack()
tk.Checkbutton(root, text="Option 2", variable=checkbox2).pack()
tk.Checkbutton(root, text="Option 3", variable=checkbox3).pack()
button = tk.Button(root, text="Submit", command=on_submit_button_click)
button.pack()
label = tk.Label(root)
label.pack()
root.mainloop()

ちなみにdef関数部分をもう少し可読性を挙げると、こんな感じ(どちらが分かりやすいんだろう

def on_submit_button_click():
    checked = [checkbox1.get(), checkbox2.get(), checkbox3.get()]
    if checked == [1, 1, 0]:
        label.config(text="Conditions 1, 2 are checked, 3 is not checked")
    elif checked == [1, 0, 1]:
        label.config(text="Conditions 1, 3 are checked, 2 is not checked")
    elif checked == [0, 1, 1]:
        label.config(text="Conditions 2, 3 are checked, 1 is not checked")
    elif checked == [1, 1, 1]:
        label.config(text="Conditions 1, 2, 3 are checked")
    else:
        label.config(text="None of the conditions are checked")

コメント

タイトルとURLをコピーしました