آموزش کامل tkinter | جلسه سوم: مدیریت جایگیری ویجتها در Tkinter
pack، grid و place
🎯 هدف جلسه:
یاد بگیریم چطور ویجتها رو در پنجره مرتب کنیم و به دلخواه در جای مناسب قرار بدیم.
سه روش اصلی جایگیری در Tkinter وجود داره:
pack سادهترین، ویجتها پشت سر هم قرار میگیرند (بالا، پایین، چپ، راست).
grid ویجتها در جدول (ردیف و ستون) چیده میشوند.
place کنترل دقیق مختصات (x,y) و اندازه ویجت.
۱. متد pack()
این متد ویجتها را پشت سر هم قرار میدهد.
|
۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ ۱۰ |
import tkinter as tk root = tk.Tk() root.geometry("۳۰۰x150") tk.Label(root, text="Label اول").pack() tk.Label(root, text="Label دوم").pack() tk.Label(root, text="Label سوم").pack() root.mainloop() |
پارامترهای مهم pack:
side: جهت قرارگیری (top, bottom, left, right) — پیشفرض top
fill: پر کردن فضای اضافه (x, y, both)
expand: با مقدار True باعث میشود ویجت فضای بیشتری بگیرد
padx, pady: فاصله از اطراف
۲. متد grid()
برای چیدمان ویجت در قالب جدول استفاده میشود.
|
۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ ۱۰ ۱۱ |
import tkinter as tk root = tk.Tk() root.geometry("۳۰۰x150") tk.Label(root, text="ردیف ۰، ستون ۰").grid(row=۰, column=۰) tk.Label(root, text="ردیف ۰، ستون ۱").grid(row=۰, column=۱) tk.Label(root, text="ردیف ۱، ستون ۰").grid(row=۱, column=۰) tk.Label(root, text="ردیف ۱، ستون ۱").grid(row=۱, column=۱) root.mainloop() |
نکات مهم grid:
row و column موقعیت سلول
میتوان ویجت را در چند ردیف یا ستون گسترش داد با rowspan و columnspan
۳. متد place()
کنترل دقیق با مختصات (x, y) و اندازه
|
۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ |
import tkinter as tk root = tk.Tk() root.geometry("۳۰۰x150") label = tk.Label(root, text="این Label با place") label.place(x=۵۰, y=۳۰) root.mainloop() |
تمرین جلسه سوم:
۱. سه Label با متون دلخواه بساز و با هر سه متد pack, grid, place آنها را در پنجره قرار بده (هر بار یکی از این روشها را تست کن).
۲. با پارامترهای side, padx, pady, row, column و x, y بازی کن و ببین چه تغییری ایجاد میشود.
|
۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ ۱۰ ۱۱ |
import tkinter as tk root = tk.Tk() root.geometry("۳۰۰x150") root.title("تمرین جایگذاری - pack") tk.Label(root, text="Label اول").pack(side="top", pady=۵) tk.Label(root, text="Label دوم").pack(side="left", padx=۱۰) tk.Label(root, text="Label سوم").pack(side="right", padx=۱۰) root.mainloop() |
روش دوم: grid
|
۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ ۱۰ ۱۱ |
import tkinter as tk root = tk.Tk() root.geometry("۳۰۰x150") root.title("تمرین جایگذاری - grid") tk.Label(root, text="ردیف ۰، ستون ۰").grid(row=۰, column=۰, padx=۵, pady=۵) tk.Label(root, text="ردیف ۰، ستون ۱").grid(row=۰, column=۱, padx=۵, pady=۵) tk.Label(root, text="ردیف ۱۱، ستون ۰").grid(row=۱, column=۰, padx=۵, pady=۵) root.mainloop() |
روش سوم: place
|
۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ ۱۰ ۱۱ |
import tkinter as tk root = tk.Tk() root.geometry("۳۰۰x150") root.title("تمرین جایگذاری - place") tk.Label(root, text="Label اول").place(x=۲۰, y=۲۰) tk.Label(root, text="Label دوم").place(x=۱۲۰, y=۵۰) tk.Label(root, text="Label سوم").place(x=۲۰۰, y=۱۰۰) root.mainloop() |
نکات مهم جلسه سوم:
۱. متد pack():
سریعترین و سادهترین روش
ویجتها را پشت سر هم و مطابق جهت side مرتب میکند
پارامترهای مهم:
side (top, bottom, left, right)
padx, pady (فاصله اطراف)
expand و fill برای پر کردن فضای خالی
۲. متد grid():
ویجتها را در جدول با ردیف و ستون مرتب میکند
بسیار کاربردی برای فرمها و چیدمان پیچیده
میتوان ویجتها را با rowspan و columnspan بزرگتر کرد
حتماً همه ویجتها یا با grid جایگذاری شوند یا با pack، ترکیب آنها باعث ارور میشود.
۳. متد place():
کنترل کامل روی مکان دقیق و اندازه ویجتها
مختصات x و y پیکسل در پنجره
برای طراحیهای خیلی دقیق یا سفارشی مناسب است
۴. نکته مهم:
نباید همزمان از pack و grid برای ویجتهای داخل یک والد (مثل root) استفاده کرد.
” لطفا سوالات خود را با ذکر عنوان مقاله ارسال کنید. تیم خانه رباتیک ایران در کنار شماست. “
آماده سازی فرم
لطفا صبر کنید
فرم ساز آسان
شعبه ساری: خیابان مهدیه، نبش بهمن شرقی
شعبه بابل: پل کارگر به سمت کشوری، روبروی ماکروویو، جنب فروشگاه جانبو
شعبه قائم شهر: خیابان ساری، بین یاس ۲۰ و ۲۲