Scrollbar
عنصر Scrollbar یک کنترل کننده لغزنده فراهم میآورد که به منظور ایجاد اسکرول عمودی برای عناصری مانند ListBox ،Text و Canvas استفاده میشود. همچنین میتوانید برای اسکرول بار افقی برای عنصر Entry نیز استفاده کنید. نحوه تعریف کردن عنصر Scrollbar به صورت زیر است:
Scrollbar (master, options, ...)
master، بیانگر پنجره والدی است که Scrollbar به آن تعلق خواهد داشت و options، تنظیمات پرکاربرد برای Scrollbar میباشند که میتوانند به صورت زوجهای کلید/مقدار که با ویرگول از هم جدا میشوند، مورد استفاده قرار گیرند. در جدول زیر لیست این تنظیمات آمده است:
تنظیمات | شرح |
activebackground | رنگ لغزنده و پیکانها زمانی که نشانگر ماوس بر روی آنها قرار میگیرد. |
bd | پهنای لبه سه بعدی در اطراف نگه دارنده و همچنین پهنای افکتهای سه بعدی پیکانها و Slider. مقدار پیش فرض صفر برای نگه دارنده و 2 پیکسل برای پیکانها و Slider است. |
bg | رنگ لغزنده و پیکانها زمانی که ماوس بر روی آنها قرار ندارد. |
command | تابعی را هنگام حرکت Scrollbar فراخوانی می کند. |
cursor | نشانگر ماوس نمایش داده شده، زمانی که ماوس بر روی Scrollbar قرار میگیرد. |
elementborderwidth | پهنای خط اطراف لغزنده و پیکانها. مقدار پیش فرض 1- است |
highlightbackground | رنگ فوکوس زمانی که Scrollbar دارای فوکوس نیست. |
highlightcolor | رنگ فوکوس نمایش داده شده، زمانی که Scrollbar دارای فوکوس است. |
highlightthickness | ضخامت فوکوس نمایش داده شده. مقدار پیش فرض 1 است. با قرار دادن صفر، نمایش فوکوس را خنثی میکنید. |
jump | این گزینه مشخص میکند در زمانی که کاربر لغزنده را با ماوس میکشد، تابع command به چه صورت فراخوانی شود. در حالت معمول (jump=0) هر جابه جایی کوچک لغزنده منجر به فراخوانی تابع command میشود. اگر مقدار این گزینه را به 1 تغییر دهید، تابع command تنها در زمان آزاد کردن دکمه ماوس فراخوانی میشود. |
orient | برای Scrollbar افقی، مقدار این گزینه را HORIZONTAL قرار دهید و برای Scrollbar عمودی، VERTICAL. |
repeatdelay | مشخص میکند چه مدت زمان دکمه Scrollbar باید پایین نگه داشته شود تا لغزنده به طور متوالی در آن جهت شروع به حرکت کند. واحد آن میلی ثانیه و مقدارپیش فرض آن 300 است. |
repeatinterval | وقفه میان حرکات متوالی |
takefocus | در حالت عادی میتوانید با tab فوکوس را به Scrollbar منتقل کنید. با قرار دادن takefocus=0 میتوانید این رفتار را غیر فعال کنید. |
troughcolor | رنگ قسمت نگه دارنده |
width | پهنای Scrollbar (در حالت افقی بعد y و در حالت عمودی بعد x را مشخص میکند) پیش فرض 16 است. |
Scrollbar دارای توابع زیر است :
تابع | شرح |
()get | این تابع دو مقدار (a, b) که بیانگر موقعیت فعلی لغزنده است را، بر میگرداند. مقدار a موقعیت چپ یا بالای لغزنده را به ترتیب برای حالت افقی یا عموی مشخص میکند. مقدار b موقعیت راست یا پایین را مشخص میکند. |
set(first, last) | برای متصل کردن Scrollbar به عنصری دیگر، دو خاصیت xscrollcommand یا yscrollcommand آن عنصر را با این تابع مقدار دهی کنید. ورودیها این تابع همانند مقادیر بازگشتی تابع get هستند. به عنوان مثال Widget.config(yscrollcommand = scrollbar.set) |
مثال زیر را امتحان کنید:
1: import tkinter 2: from tkinter import * 3: 4: window = tkinter.Tk() 5: window.geometry('300x300') 6: 7: scrollbar = Scrollbar(window) 8: scrollbar.pack( side = RIGHT, fill = Y ) 9: 10: listbox = Listbox(window, yscrollcommand = scrollbar.set ) 11: for line in range(100): 12: listbox.insert(END, "This is line number " + str(line)) 13: 14: listbox.pack( side = LEFT, expand=1, fill = BOTH ) 15: scrollbar.config( command = listbox.yview ) 16: 17: window.mainloop()
هدف اصلی از کد بالا، اختصاص یک Scrollbar به عنصر listBox است. در خطوط 7 و 8 کد بالا یک Scrollbar ایجاد کرده و آن را به سمت راست فرم چسباندهایم و گفتهایم که در محور Y همه فرم را پوشش دهد. در خط 10 یک ListBox ایجاد کرده و مقدار خاصیت yscrollcommand را برابر scrollbar.set قرار دادهایم. این بدین معنی است که مقدار اسکرول عمودی ListBox برابر مقداری است که دستگیره Scrollbar نشان میدهد. در خطوط 12-11 هم با استفاده از یک حلقه for، صد خط را به ListBox اضافه کردهایم تا اسکرول معنا پیدا کند. در خط 15 هم با استفاده از دستور command و اختصاص تابع ()yview به آن گفتهایم که با بالا و پایین کردن دستگیره Scrollbar، عنصر ListBox در راستای عمودی قابل اسکرول باشد. پس از اجرای کد بالا، نتیجهای به شکل زیر ایجاد خواهد شد:
سلام
من دکمه هارو داخل بوم(canvas) گذاشتم ، منتهی نوار پیمایش فعال نمیشه …
اینجوری میشه : http://s12.picofile.com/file/8399228950/Capture.PNG
اینم کدش : http://s13.picofile.com/file/8399228934/1.PNG
باید خود Canvas هم داخل یه فریم باشه. چیزی شبیه کد زیر
کد بالا رو تو محیط برنامه نویسیتون کپی و بررسی کنید
ممنون ، یاعلی
سلام
سوال در مورد نوار پیمایش (ScrollBar) و ListBox دارم …
این عکس رو اول ببینید : http://s12.picofile.com/file/8398519892/123.png
1- نوار فقط به ListBox و Text و Canvas و Entry متصل میشه؟
من میخواستم نوار به یک فرم که داخلش چند دکمه هست متصل بشه
و بین دکمه ها جابجا بشه …
2- اگر امکانش نیست میشه داخل ListBox یا سایر مواردی که نوار پیمایش بهشون متصل میشه
دکمه ساخت ؟
3- و اگر هیچکدوم از اینها امکان پذیر نیست ، با یک کتابخانه GUI دیگه میشه چنین چیزی ساخت؟
و کدوم کتابخانه GUI بهتره؟
سلام،
می تونید دکمه ها رو تو یه Canvas بذارین و یه ارتفاع خاص بهش بدین و Scrollbar رو هم بهش اضافه کنید
GUI هم، tkinter و هم pyqt هر دو عالین و اینی که شما میخواین باهاشون قابل پیاده سازیه