RadioButton

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

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

RadioButton(master, option=value, ...)

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

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

Radiobutton ها بایستی مقدار یکسانی برای variable و مقدار متفاوتی برای value داشته باشند. می‌توانید با استفاده از tab بین این دکمه‌ها جا به جا شوید. مثال زیر کاربرد دکمه‌ی Radio را شرح می‌دهد:

 1: import tkinter
 2: from tkinter import *
 3: from tkinter import messagebox
 4: 
 5: window = tkinter.Tk()
 6: window.geometry('300x200')
 7: 
 8: var    = IntVar()
 9: radio1 = Radiobutton(window, text="Yes", variable=var, value=1)
10: radio2 = Radiobutton(window, text="No",  variable=var, value=2)
11: button = Button(text ='Show Choise')
12: 
13: radio1.pack(anchor = W)
14: radio2.pack(anchor = W)
15: 
16: button.pack()
17: 
18: def buttonShow(event):
19:     if (var.get() == 1):
20:         messagebox.showinfo("", "You choosed Yes!")
21:     elif (var.get() == 2):
22:         messagebox.showinfo("", "You choosed No!")
23:     else:
24:         messagebox.showinfo("", "You don't choose!")
25: button.bind('<Button>', buttonShow)
26: 
27: button.mainloop()
28: window.mainloop()

در خط 8 کد بالا یک متغیر کنترلی از نوع صحیح ایجاد کرده‌ایم و در خطوط 9 و 10 آن را به خاصیت variable رو عنصر RadioButton اختصاص داده‌ایم تا وضعیت خاموش یا روشن بودن آنها را د رخود ذخیره کند. اما این متغیر چطور بفهمد که کدام دکمه الان روشن و کدام یک خاموش است. دکمه‌ها یک خاصیت به نام value دارند که با قرار دادن مقدار آن در داخل متغیر کنترلی، فهمید که کدام دکمه تیک خورده است. این مقدار زمانی در داخل متغیر کنترلی قرار می‌گیرد که تیک آن دکمه زده شده باشد. در خطوط 19 و 21 با استفاده از متد ()get چک می‌کنیم که مقدار فعلی متغیر کنترلی چند است؟ اگر مقدار 1 بود یک پیغام و اگر 2 بود پیغام دیگر را چاپ می‌کنیم. تمامی این شروط و پیغام‌ها را در داخل یک کنترل کننده رویداد نوشته (خطوط 24-18) و آن را در خط 25 به رویداد کلیک دکمه وصل می‌کنیم:
RadioButton in tkinter-01