Checkbutton

عنصر Checkbutton یک دکمه است و به شکل یک جعبه‌ی خالی به همراه یک برچسب در کنار آن نمایش داده می‌شود. در حالت عادی، زمانی که بر روی جعبه‌ی خالی کلیک شود، یک تیک در داخل جعبه نمایان می‌شود که به ما می‌گوید کنترل Checkbutton در حالت تیک خورده قرار دارد. برخلاف دکمه‌ی Radio که فقط اجازه‌ی انتخاب یکی از Radio های فرم را به ما می‌داد، شما می‌توانید چند عدد Checkbutton و یا همه‌ی آنها را تیک بزنید. Checkbutton نیز خواصی را شبیه به خواص Radio در خود جای داده است. برای ایجاد این عنصر به شکل زیر عمل می‌کنیم:

Checkbutton(master, option, ...)

master، بیانگر پنجره والدی است که این دکمه به آن تعلق خواهد داشت و options، تنظیمات پرکاربرد برای Checkbutton می‌باشند که می‌توانند به صورت زوج‌های کلید/مقدار که با ویرگول از هم جدا می‌شوند، مورد استفاده قرار گیرند. در جدول زیر لیست این تنظیمات آمده است:

تنظیمات شرح
activebackground رنگ پس زمینه زمانی که ماوس بر روی عنصر قرار می‌گیرد.
activeforeground رنگ پیش زمینه زمانی که ماوس بر روی عنصر قرار می‌گیرد.
bg رنگ پس زمینه در حالت عادی که در پشت برچسب نشان داده می‌شود.
bitmap برای نمایش تصویر تک رنگ بر روی دکمه استفاده می‌شود.
bd اندازه خط کناری قسمت علامت گذاری. پیش فرض 2 پیکسل است.
command مشخص کننده تابعی که با هر تغییر وضعیت عنصر، فراخوانی می‌شود.
cursor با قرار دادن یکی از نام های نشانگر ماوس (arrow، dot و …) برای این ویژگی، زمانی که ماوس بر روی این عنصر قرار گیرد نشانگر ماوس به الگوی مشخص شده تغییر می‌یابد.
disabledforeground رنگ متن عنصر را در حالتی که Checkbutton غیر فعال باشد، مشخص می‌نماید.
font فونت که برای متن استفاده می‌شود.
fg رنگ متن
height تعداد خطوط متن در checkbutton (مقدار پیش فرض 1 است)
highlightcolor رنگ فوکوس زمانی که فوکوس به عنصر منتقل می‌شود.
image برای نمایش تصویر بر روی دکمه
justify اگر متن چند خطی باشد، مشخص کننده نحوه تراز کردن متن است. LEFT، CENTER، RIGHT
offvalue زمانی که checkbutton در حالت خاموش (عدم تیک) قرار داشته باشد، مقدار صفر به آن اختصاص می‌یابد. می‌توانید مقدار جایگزین دیگری را با این گزینه برای حالت خاموش مشخص کنید.
onvalue مقدار checkbutton در حالت تیک دار 1 است. با این گزینه، می‌توانید مقدار جایگزین برای این حالت مشخص کنید.
padx میزان فضایی که بین لبه‌های چپ و راست checkbutton با متن قرار می‌گیرد. پیش فرض 1 است.
pady میزان فضایی که بین لبه‌های بالا و پایین checkbutton با متن قرار می‌گیرد. پیش فرض 1 است.
relief مقدار پیش فرض FLAT است، که باعث می‌شود checkbutton نسبت به پس زمینه خود برجسته نشود. شما می‌توانید این گزینه را به سبک‌های دیگر تغییر دهید.
selectcolor رنگ checkbutton زمانی که تیک دار شود. مقدار پیش فرض red است.
selectimage اگر مقدار این گزینه را یک تصویر قرار دهید.، تصویر مربوطه در checkbutton نمایش داده می‌شود.
state مقدار پیش فرض آن NORMAL است. اما شما می‌توانید مقدار DISABLED را برای غیر فعال کردن آن استفاده کنید. اگر نشانگر ماوس بر روی checkbutton قرار داشته باشد، state آن ACTIVE است.
text برچسب نمایش داده شده برای checkbutton، برای متن‌های چند خطی می‌توانید از “\n” استفاده کنید.
underline مقدار پیش فرض -1 است، هیچکدام از حروف متن زیر خط ندارد. برای زیر خط دار کردن یکی از حروف، شماره اندیس (شروع از صفر) آن را به این گزینه نسبت دهید.
variable متغییر کنترلی که وضعیت checkbutton را دنبال می‌کند. به صورت معمول این متغییر از نوع IntVar است و مقدار 0 به معنای عدم تیک، و مقدار 1 به معنای تیک دار بودن است. (گزینه‌های offvalue و onvalue را مشاهده کنید)
width مقدار پیش فرض پهنای checkbutton با توجه به اندازه متن یا تصویری که نمایش می‌دهد، مشخص می‌شود. شما می‌توانید مقدار این گزینه را به تعداد حروف مقدار دهی کنید. checkbutton همواره برای این تعداد فضا اختیار می‌کند.
wraplength در حالت عادی خطوط شکسته نمی‌شوند. شما می‌توانید این گزینه را به تعداد حروف مقداردهی کنید. تمام خطوط به گونه‌ای شکسته می‌شوند که بیش از این مقدار حرف در خود جای ندهند.

توابع پرکاربرد برای این عنصر در زیر آمده است:

تابع کاربرد
()deselect checkbutton را پاک می‌کند.
()flash باعث می‌شود رنگ checkbutton چندین بار به حالت فعال و عادی تغییر کند. سپس رنگ آن به حالت اولیه خود بر می‌گردد.
()invoke شما با فراخوانی این تابع می‌توانید به همان نتیجه‌ای دست یابید، که کاربر بر روی checkbutton کلیک می‌کند تا وضعیت آن را تغییر دهد.
()select checkbutton را تیک دار می‌کند.
()toggle اگر checkbutton تیک داشته باشد آن را پاک می‌کند. در غیر این صورت آن را تیک دار می‌کند.

به مثال زیر توجه کنید:

 1 import tkinter
 2 from tkinter import *
 3 from tkinter import messagebox
 4
 5 window = tkinter.Tk()
 6 window.geometry('300x200')
 7
 8 var1 = IntVar()
 9 checkbutton1 = Checkbutton(window, text="Soap", variable=var1, onvalue=1, offvalue=0)
10 var2 = IntVar()
11 checkbutton2 = Checkbutton(window, text="Sahmpoo", variable=var2, onvalue=1, offvalue=0)
12 var3 = IntVar()
13 checkbutton3 = Checkbutton(window, text="Toothpaste", variable=var3, onvalue=1, offvalue=0)
14 button = Button(text ='Check Out')
15
16 checkbutton1.pack(anchor = W)
17 checkbutton2.pack(anchor = W)
18 checkbutton3.pack(anchor = W)
19 button.pack()
20
21 def buttonShow(event):
22     items= ""
23     if (var1.get()):
24         items += "Soap"
25     if (var2.get()):
26         items += "\n Shampoo"
27     if (var3.get()):
28         items += "\n Toothpaste"
29     messagebox.showinfo("",items)
30
31 button.bind('<Button-1>', buttonShow)
32
33 button.mainloop()
34 window.mainloop()

همانطور که قبلاً اشاره شد، اگر چندین RadioButton در درون یک والد باشند همزمان یکی از انها می‌تواند روشن باشد ولی در Checkbutton ها قضیه فرق می‌کند و همه آن‌ها می‌توانند تیک خورده یا نخورده باشند. در نتیجه هر Checkbutton می‌تواند دارای دو حالت تیک خورد یا نخورده باشد و وضعیت آن به وسیله دو خاصیت onvalue و offvalue چک و در داخل متغیر کنترلی ذخیره می‌شود. با این تفاسیر در برنامه بالا، به ازای هر Checkbutton ما یک متغیر کنترلی تعریف کرده‌ایم (خطوط 8، 10 و 12). در خطوط 9، 11 و 13 هم سه Checkbutton ایجاد کرده و آنها را در خطوط 18-16 به سمت چپ فرم می‌چسبانیم. یک دکمه را هم برای نمایش پیغام به برنامه اضافه می‌کنیم (خطوط 14 و 19). در خطوط 29-21 یک کنترل کننده رویداد ایجاد و آن را در خط 31 به رویداد کلیک دکمه وصل کرده‌ایم. هدف کلی برنامه بالا این است که مثلاً با انتخاب چند Checkbutton، نام آنها به وسیله یک پیغام نمایش داده شود. در خط 22 یک متغیر از نوع خالی رشته تعریف کرده‌ایم. چون نام Checkbutton ها از نوع رشته است می‌توانیم آنها را با استفاده از عملگر + به متغیر items اضافه کرده و نمایش دهیم. حال چگونه بفهمیم که کدام Checkbutton انتخاب شده یا تیک خورده است. با استفاده از متد ()get این کار را در خطوط 24 و 26 و 28 انجام داده‌ایم. مثلاً ()var1.get بدین معناست که Checkbutton تیک خورده یا نه؟ البته می‌توانستیم آن را به صورت var1.get() == 1 بنویسیم ولی در حالت پیشفرض، ()var1.get مقدار 1 را بر می‌گرداند. در خط 29 هم مقادیر داخل متغیر items را چاپ می‌کنیم. برنامه را اجرا کرده و با تیک زدن Checkbutton و زدن دکمه، نتیجه را مشاهده کنید:
checkbutton-in-tkinter-01