چیدمان عناصر
چیدمان عناصر (layout manager)، نحوه چینش عناصر را بر روی فرم یا والدشان، مشخص میکند. همه عناصر tkinter به توابع خاصی، برای مشخص کردن نحوه چیدمان عنصر، دسترسی دارند. هدف این توابع مرتب کردن عناصر بر روی عنصر والد (دربرگیرندهشان) است. tkinter سه تابع زیر را برای این منظور ارائه میدهد:
- ()pack
- ()grid
- ()place
اکنون به صورت مختصر به بررسی این توابع میپردازیم.
()pack
این تابع، عناصر را قبل از قرار گرفتن بر روی فرم والدشان، درون بلوکهایی قرار میدهد :
widget.pack( pack_options )
pack_options، تنظیماتی هستند که نوع رفتار یا چینش عنصر را مشخص میکنند. در داخل پرانتز تابع ()pack میتوان از تنظیمات زیر استفاده کرد:
-
expand : اگر مقدار این گزینه را برابر 1 یا true قرار دهید و اندازه والد از اندازه فرزندش بزرگتر باشد، آن اندازه یا فضای اضافی، برای عنصر فرزند در نظر گرفته میشود ولی این بدین معنا نیست که عنصر فرزند همه آن فضا را اشغال میکند:
در شکل بالا ما سه عنصر به فرم اضافه کردهایم و خاصیت expand عنصر وسطی را برابر 1 قرار دادهایم. همانطور که مشاهده میکنید، اگر اندازه فرم بزرگتر از اندازه عناصر باشد، آن فضا یا اندازه اضافی به عنصری که خاصیت expand برابر 1 باشد، تعلق گرفته و بقیه عناصر قبل و بعد از این فضا قرار میگیرند. چون ما در مورد اضافه کردن عناصر هنوز صحبت نکردهایم به کد زیر برای چگونگی تنطیم این خاصیت بسنده میکنیم:widget.pack(expand=1)
همانطور که در کد بالا مشاهده میکنید، کافیست در داخل پرانتز expand=1 را بنویسید تا رفتار عنصر را مسخص کنید.
-
fill : با تنظیم این گزینه، عنصر فضایی را که در اختیارش قرار داده شده اشغال میکند. میتوان با استفاده از مقادیر X ،Y ،NONE و BOTH نحوه پر کردن فضا را مشخص کنیم:
مقادیر X و Y به ترتیب باعث میشوند که عنصر در راستای افقی و عمودی و مقدار BOTH باعث می ود که عنصر در هر دو راستای افقی و عمودی فضا را اشغال کند. به یک نکته در همین جا اشاره کنیم و آن این است که مقادیر Y و BOTH در صورتی اثر خود را نشان میدهند که همراه با گزینه expand = 1 به کار بروند. مثلاً ما برای ایجاد ساختاری مانند شکل بالا، کدی شبیه به کد زیر نوشتهایم :widget.pack(fill=NONE) widget.pack(fill=X) widget.pack(fill=Y , expand=1) widget.pack(fill=BOTH, expand=1)
-
side : این گزینه، مقادیر RIGHT ,LEFT ،TOP ،BOTTOM را دریافت کرده و مشخص میکند که چیدمان عناصر ابتدا از کدام قسمت والد، شروع شود. به شکل زیر توجه کنید:
برای ایجاد همچنین چیدمانی، ما کدهایی به صورت زیر نوشتهایم:widget.pack(side=TOP) widget.pack(side=LEFT) widget.pack(side=RIGHT) widget.pack(side=BOTTOM)
ممکن است این سؤال برایتان پیش بیاید که اگر دو عنصر دارای با مقادیر side یکسان چه اتفاقی می افتد؟ در این صورت، اگر عناصر دارای مقدار LEFT یا RIGHT باشند به ترتیب در کنار هم و اگر دارای مقادیر TOP و BOTTOM باشند روی هم قرار میگیرند.
()grid
این تابع، عناصر را در ساختارهایی شبیه به جدول، بر روی فرم والد، مرتب میکند:
widget.grid( pack_options )
pack_options، تنظیماتی هستند که نوع رفتار یا چینش عنصر را مشخص میکنند. در داخل پرانتز تابع ()grid میتوان از تنظیمات زیر استفاده کرد:
خاصیت | توضیح |
column | مشخص میکند که فرم به چند ستون برای قرار گرفتن عناصر تقسیم شود. |
row | مشخص میکند که فرم به چند سطر برای قرار گرفتن عناصر تقسیم شود. |
padx | فاصله بین عناصر در محور افقی را مشخص میکند. |
pady | فاصله بین عناصر در محور عمودی را مشخص میکند. |
ipadx | فاصله بین سلول و عنصری که در داخل سلول قرار دارد، در محور افقی را مشخص میکند. |
ipady | فاصله بین سلول و عنصری که در داخل سلول قرار دارد، در محور عمودی را مشخص میکند. |
sticky | اگر اندازه سلول از اندازه عنصری که در داخل آن قرار گرفته است، بزرگتر باشد، این خاصیت مشخص میکند که عنصر در چه جای سلول قرار بگیرد: شمال، شمال غربی و … . مقادیری هم که این خاصیت دریافت میکند عبارتند از : N ،E ،S ،W ،NE ،NW ،SE ،SW و center |
()place
این تابع، عناصر را در موقعیت مشخصی، بر روی فرم والد، قرار میدهد:
widget.place( pack_options )
pack_options، تنظیماتی هستند که نوع رفتار یا چینش عنصر را مشخص میکنند. در داخل پرانتز تابع ()grid میتوان از تنظیمات زیر استفاده کرد:
خاصیت | توضیح |
anchor | این خاصیت مشخص میکند که عنصر در چه جای عنصر والدش قرار بگیرد: شمال، شمال غربی و … . مقادیری هم که این خاصیت دریافت میکند عبارتند از : N ،E ،S ،W ،NE ،NW ،SE ،SW و center |
bordermode | مکان قرار گیری یک عنصر را با و بدون در نظر گرفتن ضخامت حاشیه والدش مشخص میکند. این خاصیت دو مقدار outside و inside را دریافت میکند. |
height, width | عرض و ارتفاع عنصر را مشخص میکند. |
relheight, relwidth | عددی بین 0.0 و 1.0 است و طول و عرض عنصر را با توجه به طول و عرض عنصر والدش تغییر میدهد. |
relx, rely | عددی بین 0.0 و 1.0 است و مکان قرارگیری گوشه بالا و سمت چپ یک عنصر را با توجه به گوشه بالا سمت و سمت چپ والدش مشخص میکند. |
x, y | مکان قرارگیری گوشه بالا و سمت چپ یک عنصر را با توجه به گوشه بالا سمت و سمت چپ والدش، بر اساس محورهای افقی و عمودی و با یک عدد صحیح، مشخص میکند. |
bordermode
relheight, relwidth
مقداردهی این دو خاصیت، مثلاً relwidth=1.0، یعنی اینکه عنصر ما، با کم و زیاد شدن عرض والدش، همواره تمام عرض آن را بپوشاند. به دو شکل زیر توجه کنید:
وقتی فرم را بزرگ کنیم، عنصر ما یعنی Widget همواره تمام عرض والد خود را پوشش میدهد:
relx, rely
با مقداردهی این دو خاصیت، همواره تناسب رعایت میشود. یعنی اگر شما اندازه فرم را کوچک و بزرگ کنید، عنصر هم بر اساس مقداری که به این دو خاصیت دادهاید تغییر مکان میدهد. مثلاً اگر مقادیر این دو خاصیت relx=0.5 و rely=0.5 باشد، با بزرگ و کوچک شدن فرم، گوشه بالا و سمت چپ عنثر همواره در وسط فرم قرار میگیرد. به دو شکل زیر توجه کنید:
x, y
با مقداردهی این دو خاصیت، اگر شما اندازه فرم را کوچک و بزرگ کنید، عنصر تغییر مکان نمیدهد. مثلاً اگر مقادیر این دو خاصیت y=50 و x=50 باشد، عنصر 50 پیکسل به سمت راست و 50 پیکسل به سمت پایین میآید و با بزرگ و کوچک شدن فرم، این مکان را حفظ میکند. به دو شکل زیر توجه کنید:
با سلام بسیار بسیار عالی.واقعا جامع و کامل با تصاویر عالی