ظاهر ویجت Checkbutton که ممکن است آن را به نام چک باکس Checkbox هم بشناسید، به شکل زیر است.

tkinter checkbutton

در شکل بالا دو عدد از این ویجت دیده می شود. می توان تعدادی checkbutton در یک صفحه قرار داد تا کاربر هر کدام را که می خواهد با کلیک کردن روی آن انتخاب کند یا از انتخاب بیرون بیاورد. همچنین به طور هم زمان می تواند چندین مورد را انتخاب کند.

برای آشنایی با عملکرد و چگونگی استفاده از آن برنامه زیر را نوشته ایم که با اجرای آن، کاربر می تواند دو گزینه را انتخاب کند یا از انتخاب خارج کند. با هر بار کلیک کردن روی یکی از این آیتمها متن لیبلها متناظر با حالت انتخاب آیتمها تغییر می کند.

import tkinter as tk
root = tk.Tk()
root.geometry('300x150')
root.resizable(False, False)
root.title('Checkbutton karakit')
def choice():
    if intChoice1.get()==1:
        lbl1.configure(text="Item 1 is selected.")
    else:
        lbl1.configure(text="Item 1 is NOT selected.")
    if intChoice2.get()==1:
        lbl2.configure(text="Item 2 is selected.")
    else:
        lbl2.configure(text="Item 2 is NOT selected.")   
lblSelect = tk.Label(text="Please select an item: ")
lblSelect.place(height=20,width=150,x=40,y=20)
intChoice1 = tk.IntVar()
intChoice2 = tk.IntVar()
chkChoice1 = tk.Checkbutton(root, text="Item 1" , variable=intChoice1,  command=choice)
chkChoice1.place(height=20,width=100,x=40,y=50)
chkChoice2 = tk.Checkbutton(root, text="Item 2" , variable=intChoice2,  command=choice)
chkChoice2.place(height=20,width=100,x=40,y=80)
lbl1 = tk.Label(text="Item 1 is NOT selected. ",relief="groove")
lbl1.place(height=20,width=130,x=140,y=50)
lbl2 = tk.Label(text="Item 2 is NOT selected. ",relief="groove")
lbl2.place(height=20,width=130,x=140,y=80)
root.mainloop()

توضیح برنامه

بعد از احضار کتابخانه و ایجاد پنجره اصلی ، یک تابع به نام choice تعریف کرده ایم که وظیفه آن بررسی وضعیت چک باتن ها و نمایش پیغام مناسب در لیبل هاست. در خط 15 و 16 یک لیبل ایجاد شده که قرار است یک پیغام ثابت را هنگام اجرای برنامه نمایش دهد.

در خط 17 و 18 دو متغیر مخصوص tkinter از نوع IntVar تعریف کرده ایم که قرار است وضعیت چک باتن ها در آنها ذخیره شود.

در خط 19 یک ویجت checkbutton با نام chkChoice1 ایجاد نموده ایم و متن آن را Item 1 تعیین کرده ایم. متغیر مرتبط با آن intChoice1 است که در خط 17 تعریف شد. و تابعی که با تغییر وضعیت این ویجت فراخوانی و اجرا می شود choice است که در خطوط 6 تا 14 تعریف شده است.

در خط 20 مکان و ابعاد chkChoice1 مشخص شده است.

یک ویجت دیگر با روشی مشابه با نام chkChoice2 در خطوط 21 و 22 تعریف و جانمایی می کنیم. متغیر مرتبط با آن inChoice 2 است اما با تغییر وضعیت این ویجت همان تابع choice اجرا خواهد شد.

در واقع تابع choice موقع اجرا شدن بررسی می کند که مقدار متغیر intChoice1 و intChoice2 1 است یا خیر و اگر 1 بود متوجه می شود که ویجت مربوط به آن انتخاب شده است و پیغام مناسب را در لیبل مقابل آن نمایش می دهد. اما اگر مقدار این متغیرها 1 نباشد برنامه متوجه می شود که این ویجت در حالت انتخاب قرار ندارد و پیغام متناسب را در مقابل آن نمایش می دهد.

در خطوط 23 تا 26 لیبل هایی که روبه روی چک باتن ها قرار می گیرند تعریف و متن پیش فرض آنها مشخص شده است و در آخرین خط حلقه اصلی برنامه مشاهده می شود.

بعد از اجرای برنامه پنجره زیر نمایش داده می شود:

tkinter checkbutton

همان طور که می بینید در حالت پیش فرض هیچ کدام از آیتمها انتخاب نشده اند. اما به محض انتخاب هر یک از آنها توسط کاربر پیغام متناسب در لیبل مقابل آن نمایش داده می شود:

tkinter checkbutton

در صورتی که بخواهیم یکی از چک باتن ها هنگام شروع اجرای برنامه در وضعیت انتخاب شده قرار داشته باشد کافی است متغیر مربوط به آن را با دستور زیر برابر 1 قرار دهیم:

intChoice1.set(1)

آموزشهای ابزار طراحی GUI در پایتون: tkinter