با سلام بهنام صباغی هستم با اموزش gui با کتابخانه tkinter این قسمت geometry manager pack
خب لالاخره رسیدیم به حالت های چیدن ایزار هامون روی صفحه اسم کلیشون geometry manager هست و الان من میخوام شما رو بیشتر با pack اشنا کنم همونی که تا الان ازش استفاده ی ساده میکردیم و باهاش اشنایی نداشتیم حالا براتون کامل توضیحش میدم
کد زیر رو اجرا کنید
#**********************CODE******************
from tkinter import *
from tkinter import ttk

root=Tk()

button1=ttk.Button(root,text='bytton1')
button1.pack()

#*********************************************

پنجره ی ایجاد شده رو تغییر اندازه بدید میبینید که بالای فرم و دقیقا وسط اون دکمه ی ما میاد حالا اگر بخوایم کل فرممون رو این دکمه پر کنه به صورت زیر عمل میکنیم
button1.pack(fill=X)
اینطوری در راستای ایکس اگر تغییر اندازه بدیم دکمه هم فرم رو پر میکنه و گر Y بفرستیم در راستای Y پر نمیشه ( عه چرا ؟ ) چون باید از حالت عادی دکمه رو خارج کنیم و برای این باید اجازه بدیم بهش کد زیر رو ببینید
button1.pack(fill=Y,expand =True)
بجز X و Y میتونیم BOTH بذاریم که در هر دوجهت این کار رو بکنه که این هم نیاز داره expend رو برابر True قرار بدیم
خب حالا اگر چند تا ابزار بذاریم روی فرممون میبینید که اولی بالای فرمه و بقیه زیرش هستند و اگر بخوایم میتونیم تنظیم کنیم که چطور ابزار ها چیده بشند کد زیر رو ببینید
#***********************CODE***********************
from tkinter import *
from tkinter import ttk

root=Tk()

ttk.Label(root,text='bytton1',background='red').pack(fill=BOTH,expand =True)

ttk.Label(root,text='bytton1',background='blue').pack(fill=BOTH)

ttk.Label(root,text='bytton1',background='orange').pack(fill=BOTH,expand =True)

ttk.Label(root,text='bytton1',background='green').pack(fill=BOTH,expand =True)
#*****************************************************
الان همه رو همینطوری پک کردیم و زیر هم میاند و برای تنظیم این که ابزارمون چه موقعیتی داشته باشند پراپرتی side رو تنظیم میکنیم
#***********************CODE***********************
from tkinter import *
from tkinter import ttk

root=Tk()

ttk.Label(root,text='bytton1',background='red').pack(side=LEFT)

ttk.Label(root,text='bytton1',background='blue').pack(side=LEFT)

ttk.Label(root,text='bytton1',background='orange').pack(side=LEFT)

ttk.Label(root,text='bytton1',background='green').pack(side=LEFT)
#*****************************************************
میبینید ک در مرکز محور y و کنار هم یا به عبارت دقیق تر سمت چپ همدیگه هستند حالا کد زیر رو ببینید
#***********************CODE***********************
from tkinter import *
from tkinter import ttk

root=Tk()

ttk.Label(root,text='bytton1',background='red').pack(side=LEFT,anchor='nw')

ttk.Label(root,text='bytton1',background='blue').pack(side=LEFT,padx=10,pady=10)

ttk.Label(root,text='bytton1',background='orange').pack(side=LEFT,ipadx=10,ipady=10)

ttk.Label(root,text='bytton1',background='green').pack(side=LEFT)

#*****************************************************
برای لیبل قرمزم anchor رو گذاشتم 'nw' یعنی شمال غربی پس میاد گوشه ی سمت چپ بالا
برای لیبل ابیم padx و pady تنظیم کردم یعنی حد اقل فاصلش رو تنظیم کردم از x و y خودتون تست کنید تا درست یاد بگیرید
برای لیبل بعدی ipadx و ipady تنظیم کردم یه جورایی میشه بگی اندازه رو تنظیم میکنه
اخرین لیبلم رو هم که هیچ کاریش نکردم  خب میتونیم لیستی از ابزار هایی که روی مثلا پنجره ی اصلیمون با pack اوردیم رو داشته باشیم برای جاهایی بکار میاد که مثلا میخوایم یه سری خاصیت رو به تمام ابزارهام بدم به صورت زیر میشه

#***********************CODE***********************
from tkinter import *
from tkinter import ttk

root=Tk()

ttk.Label(root,text='bytton1',background='red').pack(side=LEFT,anchor='nw')

ttk.Label(root,text='bytton1',background='blue').pack(side=LEFT,padx=10,pady=10)

ttk.Label(root,text='bytton1',background='orange').pack(side=LEFT,ipadx=10,ipady=10)

ttk.Label(root,text='bytton1',background='green').pack(side=LEFT)

for widget in root.pack_slaves():
    widget.pack_configure(fill=BOTH,expand=True)

#*****************************************************
دوستان دیگه چیز های ابتدایی رو توضیح نمیدم که شما هم خسته نشید
root.pack_slaves()
اون لیستیه که میگفتم برای گرفتن ابزار هاست همینه و برای دوباره تنظیم کردن pack یک ابزار pack_configure استفاده میکنیم حالا کد زیر رو اضافه کنید داخل حلقه ی for کد بالا
print(widget.pack_info())
دوتا نکته ی دیگه مونده که بگم دوستان یکی این که من توی کد های این درس pack رو دقیقا اخر ساخت لیبل گاشتم که اصلا خوب نیت و نمیشه بعدا از لیبل استفاده کرد و بهتره همیشه لیبلمون رو با یه نام ذخیره کنیم تا بتونیم بعدا ازش استفاده کنیم مثل همون کاری که قبلا میکردم توی درس های قبلی و نکته ی دوم اینه که اگر بخوایم یک ابزار رو از صفحه پاک کنیم به صورت زیر عمل میکنیم
#***********************CODE***********************
from tkinter import *
from tkinter import ttk

root=Tk()

b1=ttk.Label(root,text='bytton1',background='red').pack(side=LEFT,anchor='nw')

b2=ttk.Label(root,text='bytton1',background='blue').pack(side=LEFT,padx=10,pady=10)

b3=ttk.Label(root,text='bytton1',background='orange').pack(side=LEFT,ipadx=10,ipady=10)

b4=ttk.Label(root,text='bytton1',background='green').pack(side=LEFT)

for widget in root.pack_slaves():
    widget.pack_configure(fill=BOTH,expand=True)

b4.pack_forget()
#*****************************************************