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,LEFTvə yaRIGHTola bilər. - fill: Elementin ox boyunca boş sahəni doldurub-doldurmayacağını təyin edir. Məsələn,
Xüfüqi olaraq dolduracaq,Yisə ş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,Wvə 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