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 با توجه به آن مقدار تغییر کند. برنامه را اجرا و با حرکت دستگیره ها به سمت راست و چپ، نتیجه را مشاهده کنید:
scale-in-tkinter