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 و زدن دکمه، نتیجه را مشاهده کنید:
در کد تو رفتگیها (delimiter) رعایت نشده.
ممنون بابت توجهتون. اصلاح شد