1. Tkinter-də elementlərin yerləşdirilməsi metodları
Bəlkə də artıq fərqinə varmışsınız, qrafik interfeyslər sadəcə ekranda səpələnmiş düymələr və mətn sahələri deyil. Bunlar yaxşı struktura malik və erqonomik tətbiqlərdir, burada hər detal öz yerindədir. Tkinter üç əsas yerləşdirmə metodunu təklif edir: pack
, grid
və place
. Bu gün biz pack
və grid
üzərində dayanacağıq, place
-i isə daha mürəkkəb kompozisiyalar üçün və ya elementləri tam konkret mövqelərdə yerləşdirmək lazım gələndə saxlayacağıq.
pack
ilə tanışlıq
pack
metodu vidcetlərin yerləşdirilməsi üçün sadə və intuitiv bir yanaşmadır. O, elementləri "birinci gələn – birinci yerləşdirilir" prinsipi ilə düzür və interfeysi tez və rahat şəkildə təşkil etməyə imkan verir. Lakin sadəliyinə görə bəzən elementlərin dəqiq yerləşdirilməsinə tam nəzarət təklif etmir.
pack
-in istifadəsinə nümunə
import tkinter as tk
root = tk.Tk()
root.title("pack ilə yerləşdirmə nümunəsi")
# Bir neçə vidcet yaradırıq
label = tk.Label(root, text="Mən yazıyam")
button = tk.Button(root, text="Mən düyməyəm")
# Vidcetləri pack ilə yerləşdiririk
label.pack()
button.pack()
root.mainloop()
Bu nümunədə label
və button
sadəcə bir-birinin altında, dostcasına bir növbədə düzülür. Starbucks-da növbələr necə işlədiyini bilirsinizsə, bu sizə tanış gələcək!
grid
ilə tanışlıq
Əgər pack
şən və xaotik bir festivaldırsa, grid
klassik bir kitabxanadır, burada hər kitab (yəni, vidcet) dəqiq bir rəf üzərində yerləşir. grid
metodu elementləri cədvəl şəklində yerləşdirməyə imkan verir, dəqiq mövqe idarəetməsi təklif edir. Artıq burada hansı elementlərin bir-birinə yaxın olacağını siz qərar verirsiniz.
grid
-in istifadəsinə nümunə
import tkinter as tk
root = tk.Tk()
root.title("grid ilə yerləşdirmə nümunəsi")
# Düymələr yaradırıq
buttons = [
"1", "2", "3",
"4", "5", "6",
"7", "8", "9",
"0", "+", "="
]
# Düymələri şəbəkəyə daxil edirik
row_val = 0
col_val = 0
for button in buttons:
btn = tk.Button(root, text=button, width=5)
btn.grid(row=row_val, column=col_val)
col_val += 1
if col_val > 2:
col_val = 0
row_val += 1
root.mainloop()
Bu nümunədə grid
düymələri səhər yoxlamasında sıraya düzülmüş kimi görünür, bu da daha nizamlı və peşəkar təsir bağışlayır.
2. Elementlərin yerləşdirilməsi üçün pack
istifadə olunması
pack
metodunun elementlərin bir-birinə nisbətən necə yerləşdiriləcəyini idarə etməyə imkan verən bir neçə rejimi var. O, side
, fill
, expand
və padx/pady
kimi parametrləri dəstəkləyir.
pack
tənzimləməsi
- side: Elementin valideyn konteynerin hansı tərəfində yerləşdiriləcəyini təyin edir. Bu,
TOP
,BOTTOM
,LEFT
və yaRIGHT
ola bilər. - fill: Elementin ox boyunca boş sahəni doldurub-doldurmayacağını təyin edir. Məsələn,
X
üfüqi olaraq dolduracaq,Y
isə şaquli olaraq dolduracaq. - expand: Layout menecerinə elementin əlavə yer tutub-tutmayacağını bildirir, belə bir yer yaranarsa.
- padx/pady: Üfüqi və şaquli olaraq boşluqları təyin edir.
pack
metodunun geniş istifadə nümunəsi
import tkinter as tk
root = tk.Tk()
root.title("pack metodunun geniş nümunəsi")
tk.Label(root, text="Üstdə").pack(side=tk.TOP, fill=tk.X)
tk.Label(root, text="Altda").pack(side=tk.BOTTOM, fill=tk.X)
tk.Label(root, text="Solda").pack(side=tk.LEFT, fill=tk.Y)
tk.Label(root, text="Sağda").pack(side=tk.RIGHT, fill=tk.Y)
root.mainloop()
3. Şəbəkə yerləşdirilməsi üçün grid
-dən istifadə
grid
metodu daha mürəkkəbdir və şəbəkə və hüceyrələrlə işləmə prinsiplərinin başa düşülməsini tələb edir. Amma bunu öyrəndikdən sonra istənilən mürəkkəblikdə interfeyslər yarada bilərsiniz.
grid
-in tənzimlənməsi
- row / column: Elementin hansı sətir və ya sütunda yerləşəcəyini müəyyən edir.
- rowspan / columnspan: Elementin neçə sətir və ya sütunu əhatə edəcəyini müəyyən edir.
- sticky: Elementin hüceyrə sərhədlərinə necə "yapışacağını" müəyyən edir. Parametrlər
N
,E
,S
,W
və onların kombinasiyaları ola bilər.
grid
-in genişləndirilmiş istifadəsinə dair nümunə
import tkinter as tk
root = tk.Tk()
root.title("Grid-in genişləndirilmiş nümunəsi")
# Etiketlər yaradırıq və onları şəbəkədə yerləşdiririk
tk.Label(root, text="Sıra 0, Sütun 0").grid(row=0, column=0, sticky="W")
tk.Label(root, text="Sıra 0, Sütun 1").grid(row=0, column=1, sticky="E")
tk.Label(root, text="Sıra 1, Sütun 0").grid(row=1, column=0, columnspan=2)
root.mainloop()
4. Praktiki tətbiq və tipik səhvlər
Təkcə bir tərtibat metodundan istifadə etmək istəyi ola bilər, amma əksər hallarda onları birləşdirmək lazım olur. Çox vaxt rast gəlinən səhvlər: mainloop
funksiyasını çağırmağı unutmaq, sətir və ya sütun indeksini səhv yazmaq, lazım olduqda expand
və fill
istifadə etməməkdir. İnterfeys inkişaf etdirərkən baş ağrısından qaçmaq üçün hər zaman pack
və ya grid
çağırma qaydasını yoxlayın və onların parametrlərini düzgün istifadə etdiyinizə əmin olun.
pack
və grid
arasındakı fərq elementlərin yerləşməsindəki elastiklik və nəzarətdir. pack
sadə şaquli və ya üfüqi interfeyslər üçün daha rahatdır, halbuki grid
dəqiq element mövqelərinin vacib olduğu mürəkkəb layoutlar üçün idealdır.
İndi, tərtibat metodlarından istifadə edərək öz interfeyslərinizi yaratmağa hazır olduğunuzda yadınızda saxlayın ki, widget-ları ekranda yerləşdirmək bir ziyafət təşkil etmək kimidir. Hər kəs özünü rahat hiss etməlidir. Kimsə divar boyunca dayanmaq istər, kimsə isə otağın ortasında gəzmək istəyər, amma hər kəs öz yerində olmalıdır. İşə başlayın və möhtəşəm interfeyslər yaradın!
GO TO FULL VERSION