Scale
عنصر Scale شبیه یک نوار لغزنده با یک دستگیره است که با استفاده از این دستگیره، امکان انتخاب یک مقدار در یک بازه مشخص میدهد. ناحیهای که دستگیره به آن اشاره میکند نشان دهنده مقدار جاری کنترل است. نحوه ایجاد این عنصر به صورت زیر است:
Scale ( master, option, ... )
master، بیانگر پنجره والدی است که Scale به آن تعلق خواهد داشت و options، تنظیمات پرکاربرد برای Scale میباشند که میتوانند به صورت زوجهای کلید/مقدار که با ویرگول از هم جدا میشوند، مورد استفاده قرار گیرند. در جدول زیر لیست این تنظیمات آمده است:
تنظیمات | شرح |
activebackground | رنگ پس زمینه زمانی که نشانگر ماوس بر روی scale قرار میگیرد. |
bd | پهنای خط حاشیه سه بعدی اطراف نگه دارنده و لغزنده. پیش فرض 2 پیکسل است. |
bg | رنگ پس زمینه بخشهایی که خارج از بخش نگه دارنده هستند را، مشخص می کند. |
command | تابعی که با هر بار تغییر مکان لغزنده فراخوانی می شود. این تابع یک ورودی دریافت میکند. اگر لغزنده سریع جا به جا شود، ممکن است به ازای هر جابه جایی این تابع فراخوانی نشود، اما مطمئناً در زمان توقف آن فراخوانی خواهد شد. |
cursor | شکل نشانگر ماوس نمایش داده شده، زمانی که ماوس بر روی این عنصر قرار میگیرد را، مشخص می کند. |
digits | برای خواندن مقدار scale درون برنامه از متغییر کنترلی استفاده میشود. این متغییر کنترلی میتواند از نوع IntVar ،DoubleVar یا StringVar باشد. اگر متغییر کنترلی از نوع StringVar باشد، گزینه digits مشخص کننده تعداد رقمهای مقدار عددی scale که باید به string تبدیل شوند است. |
fg | رنگ استفاده شده برای متن را، مشخص می کند. |
font | فونت استفاده شده برای متن را، مشخص می کند. |
from_ | مقدار عددی صحیح یا اعشاری که یک سمت بازه را مشخص میکند. |
highlightbackground | رنگ فوکوس زمانی که scale دارای فوکوس نیست را، مشخص می کند. |
highlightcolor | رنگ فوکوس زمانی که فوکوس به scale منتقل میشود را، مشخص می کند. |
label | با انتساب یک متن به این گزینه میتوانید یک برچسب بر روی عنصر قرار دهید. در حالت افقی Scale این متن در گوشه بالا و چپ عنصر و در حالت عمودی در گوشه بالا راست قرار میگیرد. در حالت پیش فرض برچسبی نمایش داده نمیشود. |
length | اندازه این عنصر را، مشخص می کند. در حالت افقی اندازه در راستای x و در حالت عموی اندازه در راستای y است. مقدار پیش فرض 100 پیکسل است. |
orient | برای حالت افقی orient=HORIZONTAL قرار دهید، و برای حالت عمودی orient=VERTICAL. |
relief | نوع لبه کناری را مشخص میکند. مقدار پیش فرض FLAT است. دارای مقادیر: SUNKEN ،RAISED ،GROOVE و RIDGE است. |
repeatdelay | مشخص میکند چه مدت زمان دکمه ماوس درون نگه دارنده باید پایین نگه داشته شود تا لغزنده به طور متوالی در آن جهت شروع به حرکت کند. واحد آن میلی ثانیه و مقدارپیش فرض آن 300 است. |
resolution | در حالت عادی کاربر میتواند مقدار scale را به صورت یک واحدی تغییر دهد. اگر عدد دیگری را به resolution انتساب دهید، گام تغییر scale به آن عدد تغییر میکند.
به عنوان مثال اگر from_=-1.0 و to=1.0 و resolution=0.5 قرار داده شوند، مقادیر ممکن برای انتخاب 1.0-, 0.5-, 0.0, 0.5, 1.0 خواهند بود. |
showvalue | در حالت عادی مقدار فعلی scale به صورت نوشتهای در کنار لغزنده نمایش داده میشود (در حالت افقی بالای لغزنده و در حالت افقی در سمت چپ آن).
با قرار دادن showvalue=0 این برچسب نمایش داده نمیشود. |
sliderlength | در حالت پیش فرض اندازه بخش لغزنده 30 پیکسل است. با مقداردهی این گزینه میتوانید انداره لغزنده را تغییر دهید. |
state | در حالت پیش فرض scale به رخدادهای ماوس و در زمان داشتن فوکوس به رخدادهای کیبورد پاسخ میدهد. قرار دادن state=DISABLED منجر به غیر فعال شدن عملکرد آن میشود. |
takefocus | اگر مقدار 0 را برای این گزینه قرار دهید، فوکوس به این عنصر منتقل نخواهد شد. با مقدار 1 این عنصر فوکوس دریافت خواهد کرد. |
tickinterval | با انتساب یک عدد به این گزینه، مقادیر scale در بازهها به اندازه آن عدد بر روی عنصر نمایش داده میشوند. برای مثال from_=0.0، to=1.0 و tickinterval=0.25 برچسبهایی در طول عنصر در مقادیر 0.0, 0.25, 0.50, 0.75, 1.00 نمایش داده میشوند. در حالت افقی این برچسبها در قسمت پایین و در حالت عمودی در سمت چپ عنصر نمایش داده میشوند. مقدار پیش فرض 0 است که در این حالت برچسبی نمایش داده نمیشود. |
to | مقدار عددی صحیح یا اعشاری که سمت دیگر بازه مقادیر scale را مشخص میکند. سمت دیگر آن به وسیله گزینه from_ تعیین میشود. مقدار to میتواند بزرگتر یا کوچکتر از from_ باشد.
در حالت عمودی مقدار to سمت پایین و در حالت افقی سمت راست scale را مشخص میکند. |
troughcolor | رنگ بخش نگه دارنده لغزنده |
variable | متغییر کنترلی برای این عنصر. متغییر کنترلی میتواند از نوع IntVar ،DoubleVar یا StringVar باشد. در حالت StringVar مقدار عددی به متن تبدیل خواهد شد. |
width | پهنای بخش نگهدارنده در این عنصر. در حالت عمودی اندازه بُعد x و در حالت افقی اندازه بُعد y را مشخص میکند. مقدار پیش فرض 15 پیکسل است. |
عنصر scale دارای توابع زیر است :
تابع | شرح |
()get | مقدار فعلی scale را بر میگرداند. |
set(value) | مقدار scale را به مقدار value تغییر میدهد. |
قطعه کد زیر را امتحان کنید:
1: import tkinter 2: from tkinter import * 3: 4: window = tkinter.Tk() 5: window.geometry('300x300') 6: 7: def _from_rgb(r=0, g=0, b=0): 8: r = red.get() 9: g = green.get() 10: b = blue.get() 11: label.config(bg=('#{:02X}{:02X}{:02X}'.format(r, g, b))) 12: 13: red = Scale( window, orient=HORIZONTAL, length=290, from_=0, to=255, command=_from_rgb) 14: red.pack(anchor=CENTER) 15: 16: green = Scale( window, orient=HORIZONTAL, length=290, from_=0, to=255, command=_from_rgb) 17: green.pack(anchor=CENTER) 18: 19: blue = Scale( window, orient=HORIZONTAL, length=290, from_=0, to=255, command=_from_rgb) 20: blue.pack(anchor=CENTER) 21: 22: label = Label(window, width=150, height=75, bg="#000") 23: label.pack() 24: 25: window.mainloop()
هدف از کد بالا، تغییر رنگ پس زمینه یک Label به وسیله سه عنصر Scale می باشد. در خط 11-7 یک تابع تعریف کرده ایم. این تابع سه پارامتر پیشفرض می گیرد. در بدنه این تابع گفته ایم که هر کدام از این پارامترها، مقدار فعلی یک عنصر Scale را در خود ذخیره کنند. این کار باعث می شود که حتی اگر شما دستگیره یک Scale را حرکت ندهید، متغیر مربوطه مقدار 0 را در خود به صورت پیشفرض داشته باشد. پس متغیرها یا مقدار پیشفرض خود یعنی 0 را دارند یا به محض حرکت دادن دستگیره ها، مقدار فعلی Scale را در خود ذخیره می کنند. در خط 11 گفته ایم، که با فراخوانی تابع ()from_rgb_ رنگ پس زمنیه Label تغییر کند. #{:02X}{:02X}{:02X} یک رشته قالب بندی شده سه قسمتی است که از آن برای نمایش رنگ به صورت هگزادسیمال استفاده می شود. در ادامه هم هر کدام از مقادیر مربوط به پارامترهای تابع ()from_rgb_، یعنی g ،r و b با استفاده از متد ()format جایگزین آن سه قسمت رشته قالب بندی می شوند. فرضا اگر ما دستگیره اولین عنصر Scale را روی عدد 145 بگذاریم، مقداردهی این رشته قالب بندی به صورت زیر خواهد شد:
#145000000
و در نتیجه رنگ پس زمینه Label به صورت زیر خواهد شد:
label = Label(window, width=150, height=75, bg="#145000000")
اما چگونه این مقادیر با حرکت دادن دستگیره Scale باعث تغییر رنگ پس زمینه Label می شوند. در خطوط 20-13 سه عنصر Scale ایجاد کرده ایم و با استفاده از دستور command تابع ()from_rgb_ را فراخوانی کرده ایم. اینکار باعث می شود که با حرکت دستگیره Scale، تابع ()from_rgb_ فراخوانی شده و مقدار فعلی دستگیره در متغیر مربوطه قرار بگیرد و در نهایت رنگ پس زمینه Label با توجه به آن مقدار تغییر کند. برنامه را اجرا و با حرکت دستگیره ها به سمت راست و چپ، نتیجه را مشاهده کنید: