admin
Bölüm 3 – Tkinter ile Python’da GUI Uygulama Geliştirme: Sıfırdan İleri Seviyeye
Merhaba Tkinter ile GUI derslerimizin 3. bölümü ile sizlerleyiz … 2. bölümde window, button, label ve entry nedir, nasıl kullanılır, parametreleri nelerdir bunlardan bahsetmiştik. Bunlardan önceki bölümleri de okumak isterseniz:
https://cagyazilim.com.tr/bolum-1/
https://cagyazilim.com.tr/bolum-2/
Bu bölümümzde ise layout yöntemlerimizi öğreneceğiz. Hadi başlayalım o zaman…
İçindekiler
Tkinter Layout Nedir?
Tkinter kütüphanesi kullanılarak Python dilinde GUI (Graphical User Interface) uygulamaları oluştururken widget’ların nasıl yerleştirileceği ve düzenleneceğiyle ilgili bir kavramdır. Tk’de widget’ların düzenlenmesi, widget’ların hangi pozisyonlarda ve hangi boyutlarda görüneceğini belirlemek için farklı yönticiler kullanılabilmektedir. En yaygın kullanılan yöneticiler: pack manager, grid manager ve place manager’dır.
Yazılarımızda özellikle terimlerin İngilizcesi’ni tercih ediyoruz çünkü araştırma yaparken ve onları kullanırken karşınıza hep bu halleri ile çıkacaklar. O zaman şimdi hepsini tek tek açıklama zamanı.
Pack Manager
Pack manager, pack() metodunu kullanarak widget’ları ekran üzerindeki belirli bir düzen içinde yerleştirmeyi sağlar. Bu manager, widget’ları yatay (horizontal) ve dikey (vertical) yönde sıralamak için kullanılabilir. Pack manager’ını kullandığınızda, widget’lar eklenme sırasına göre yığılır. Bu benim için hiçbir şey ifade etmiyor diyorsanız gelin bir örnekle inceleyelim ama önce hangi parametreleri var bir ona bakalım.
Parametre | Açıklama |
side | Widget’ın ekran üzerindeki yatay yöndeki yerleştirileceği kenarı belirler. Örneğin tk.LEFT, tk.RIGHT, tk.TOP veya tk.BOTTOM gibi değerler alabilir. |
fill | Widget’ın yatay (x) ve dikey (y) olarak nasıl doldurulacağını belirler. Örneğin, tk.X yalnızca yatay yönde, tk.Y yalnızca dikey yönde doldurma sağlar ve tk.BOTH her iki yönde de doldurur. |
expand | Eğer True olarak ayarlanırsa, widget’ın yeterli alan varsa ekran boyutlarına göre genişlemesini sağlar. |
padx pady | Widget’ın x (yatay) ve y (dikey) yönde dış kenarlara olan uzaklığını belirler. Örneğin, padx=10 ifadesi, widget’ın sol ve sağ kenarları arasında 10 piksel boşluk bırakır. |
anchor | Widget’ın, kendisine ayrılan alanda nasıl hizalanacağını belirler. “n” (kuzey), “s” (güney), “e” (doğu), “w” (batı) veya “center” olarak ayarlanabilir. |
Şimdi iki farklı kod yazarak inceleyelim. Başka bir kaynaktan daha bakmak isterseniz bu linke tıklayabilirsiniz : https://www.tutorialspoint.com/python/python_gui_programming.htm
import tkinter as tk
root = tk.Tk()
root.geometry("200x200")
# Pack manager ile düğmeleri sıralıyoruz
button1 = tk.Button(root, text="Button 1", bg = "red", fg = "white")
button1.pack(side=tk.LEFT, padx=0, pady=10)
button2 = tk.Button(root, text="Button 2", bg = "white", fg = "red")
button2.pack(side=tk.RIGHT, padx=30, pady=10)
root.mainloop()
Kodumuzu inceleyelim : Button 1 için soldan konumlandırılmasını ve padx’i sıfır yaparak yatay eksende hiç boşluk bırakmamasını sağladık. Button 2 için ise sağdan konumlandırmasını ve sağdan 30 piksel boşluk bırakmasını söyledik ve işte çıktımız:
Şimdi ise side parametresini farklı seçerek başka bir kod yazalım:
import tkinter as tk
root = tk.Tk()
root.geometry("200x200")
# Pack manager ile düğmeleri sıralıyoruz
button1 = tk.Button(root, text="Button 1", bg = "red")
button1.pack(side=tk.TOP, padx=0, pady=10, fill = tk.X)
button2 = tk.Button(root, text="Button 2", bg = "white")
button2.pack(side=tk.TOP, padx=0, pady=5, fill = tk.X)
button3 = tk.Button(root, text="Button 3", bg = "green")
button3.pack(side=tk.LEFT, padx=15, pady=5, fill = tk.Y)
button4 = tk.Button(root, text="Button 4", bg = "pink")
button4.pack(side=tk.RIGHT, padx=15, pady=10, fill = tk.Y)
root.mainloop()
Bu kodda ise farklı side, fill, padx ve pady değerleri kullandık. Pack manager için örneklerimizi burada bitti ama benim size tavsiyem kendiniz parametrelerde değişiklik yaparak deneyin. Bu şekilde mantığını iyice kavrayabilirsiniz. Bu kodumuzun çıktısı ise şu şekilde:
Avantajları
- Basit ve hızlı kullanımı sayesinde hızlı bir şekilde widget’ları yerleştirmeyi sağlar.
- Widget’ları pencere boyutunu dikkate alarak otomatik olarak yeniden boyutlandırabilir ve uygun bir düzen oluşturabilir.
- Yatay ve dikey hizalama seçenekleri kolayca kullanılabilir.
- Paket manager, sadece birkaç widget içeren basit arayüzler için idealdir.
Dezavantajları
- Daha karmaşık ve düzenli arayüzler oluşturmak için yetersiz olabilir.
- Farklı widget boyutları, sıralamaları ve ekstra boşluklar gibi durumlarda istenilen düzeni elde etmek zor olabilir.
Grid Manager
Tk’da bulunan bir diğer yerleştirme manager’ı olan grid, widget’ları bir ızgara düzenine göre yerleştirmek için kullanılır. Grid manager’ı, widget’ları satır ve sütun indeksleriyle hücre tabanlı bir ızgara üzerine yerleştirir. Bu sayede widget’lar, daha karmaşık ve düzenli kullanıcı arayüzleri oluşturmak için daha hassas bir kontrol sağlar.
Şimdi grid manager için de parametrelerimize bakalım. Parametrelerin açıklamalarına başka bir sayfadan da bakmak isterseniz linkimiz: https://www.tutorialspoint.com/python/tk_grid.htm
Parametre | Açıklama |
row | Widget’ın hangi satıra yerleştirileceğini belirler. Satır indeksi 0’dan başlar. |
column | Widget’ın hangi sütuna yerleştirileceğini belirler. Sütun indeksi 0’dan başlar. |
rowspan | Widget’ın kaç satırı kaplayacağını belirler. |
columnspan | Widget’ın kaç sütunu kaplayacağını belirler. |
sticky | Widget’ın ızgara hücresinde nasıl hizalanacağını belirler. “N” (kuzey), “S” (güney), “E” (doğu), “W” (batı) veya kombinasyonları olarak ayarlanabilir. Örneğin, “NW” kuzeybatı köşede, “NSEW” her yönde genişletilmiş olarak hizalama yapar. |
padx pady | Widget’ın x (yatay) ve y (dikey) yönde dış kenarlara olan uzaklığını belirler. |
ipadx ipady | Widgets’in sınırları içinde, widget’ları yatay ve dikey olarak kaç pikselce dolgu yapılacağını belirler. |
Şimdi bir deneme de bu manager için yapalım:
import tkinter as tk
root = tk.Tk()
# İki etiket oluşturuyoruz ve her birini farklı sütunlara yerleştiriyoruz
label1 = tk.Label(root, text="Label 1", bg="red")
label1.grid(row=0, column=0, padx=5, pady=5)
label2 = tk.Label(root, text="Label 2", bg="green")
label2.grid(row=1, column=0, padx=5, pady=5)
# Üçüncü bir etiket oluşturuyoruz ve ilk iki sütunu kaplayacak şekilde yerleştiriyoruz
label3 = tk.Label(root, text="Label 3 - 2 Sütun Kaplamakta", bg="blue", fg="white")
label3.grid(row=0, column=1, columnspan=2, padx=5, pady=5)
# Dördüncü bir etiket oluşturuyoruz ve ilk sütuna yerleştiriyoruz
label4 = tk.Label(root, text="Label 4", bg="yellow")
label4.grid(row=2, column=0, padx=5, pady=5)
root.mainloop()
Yukarıdaki örneğimizde label’larımızı grid manager ile yerleştirdik. Row’larımız satır column’larımız sütunlarımız. Şimdi row = 0 column = 0 sıfır sol üst bölgemiz. Burada daha iyi anlamanız için bir tablo ile anlatacağım.
Label 1 (row = 0, column = 0) | Label 3 (row = 0, column = 1) (Ama columnspan=2 olduğu için 2 sütunluk yer kaplıyor bu label’ımız. |
Label 2 (row = 1, column = 0) | |
Label 4 (row = 2, column = 0) |
Çıktımıza bakalım o zaman:
Sizde bu managerı kullanırken kullanacağınız alanı tablo gibi düşünmeniz kolaylık sağlayacaktır. Diğer parametreleri deneyerek, birkaç örnekte kendiniz yaparsanız bu manager’ın mantığını iyice anlayacaksınız.
Avantajları
- Daha karmaşık ve düzenli arayüzler oluşturmak için daha uygun ve esnektir.
- Widget’ları ızgara tabanlı hücrelere yerleştirerek düzeni daha kolay kontrol edebilirsiniz.
- Widget’ların genişlik ve yükseklikleri otomatik olarak dengelenir, düzenleme yapmak için daha az çaba harcarsınız.
- Yatay ve dikey genişleme seçenekleriyle widget’ları ızgaranın üzerinde genişletebilirsiniz.
Dezavantajları
- Daha karmaşık düzenlemeler için özel hizalama istiyorsanız, yerleşim için daha fazla parametre kullanmanız gerekebilir.
Place Manager
Tkinter’da bulunan bir diğer yerleştirme manager’ı olan place, widget’ları kesin piksel koordinatlarına göre yerleştirmek için kullanılır. Bu manager, diğer manager’lara göre daha esnek bir yerleştirme sağlar ve widget’ları tam olarak istediğiniz konuma yerleştirmenize olanak tanır. Place manager parametrelerine buradan da göz atabilirsiniz: https://www.tutorialspoint.com/python/tk_place.htm
Şimdi parametrelerimizi inceleyelim:
Parametre | Açıklama |
x y | Piksel cinsinden yatay ve dikey ofset değeridir. Widget’ı pencerenin içindeki belirli bir konuma yerleştirmek için kullanılır. |
anchor | Widget’ın kendisine ayrılan alanda nasıl hizalanacağını belirler. “n” (kuzey), “s” (güney), “e” (doğu), “w” (batı) veya “center” olarak ayarlanabilir. |
width | Widget’ın genişliğini piksel cinsinden belirler. |
height | Widget’ın yüksekliğini piksel cinsinden belirler. |
relx rely | Widget’ın üst düzey konteynere (örneğin, ana pencere) göre yüzde olarak konumunu belirler. |
relwidth relheight | Widget’ın üst düzey konteynere göre yüzde olarak genişliğini ve yüksekliğini belirler. |
Şimdi bir kod yazarak bu manager’ımızı da inceleyelim.
import tkinter as tk
root = tk.Tk()
root.geometry("400x300")
# Etiket oluşturma ve yerleştirme
label = tk.Label(root, text="Merhaba", bg="cyan", fg="black")
label.place(x=150, y=20, width=300, height=50, anchor=tk.CENTER)
label2 = tk.Label(root, text="Place Manager", bg="pink", fg="black")
label2.place(x=150, y=250, relwidth = 0.5, relheight = 0.1)
# Düğme oluşturma ve yerleştirme
button = tk.Button(root, text="Tıkla", bg="green", fg="white")
button.place(x=50, y=100, width=100, height=40)
# Metin kutusu oluşturma ve yerleştirme
entry = tk.Entry(root, width=30)
entry.place(x=200, y=100, anchor=tk.W)
root.mainloop()
Kısaca kodu inceleyecek olursak: x ve y parametrelerini kullanarak penceremize widget’larımızı konumlandırdık. relwidth ve relheigt kullanarak nasıl pencereye orantılı olarak boyut ayarlanabileceğini gösterdik. Çıktımız aşağıdaki gibi olmaktadır:
Bölüm 2’de öğrendiğimiz widget’ları kullanarak 3 manager için tekrar yapmak öğretici olacaktır. Lütfen üşenmeyin. Bir iki parametre ile oynadıktan sonra hepsinin çalışma mantığının anlaşılacağına eminim. Son olarakta bu manager’ın avantaj ve dezavantajlarına bakarak bu bölümümüzü bitirelim.
Avantajları
- Widget’ları piksel bazında hassas bir şekilde yerleştirmek için uygundur, bu da özel düzenlemeler için faydalı olabilir.
- Widget’ların tam olarak istediğiniz konuma yerleştirilmesini sağlar.
- Animasyonlar ve grafikler gibi özel kullanıcı arayüzü bileşenleri için kullanılabilir.
Dezavantajları
- Farklı ekran boyutlarına sahip sistemlerde uyumluluk sorunları yaşatabilir.
- Widget’ların yeniden boyutlandırılması ve düzenlenmesi daha fazla çaba gerektirebilir.
Hangi Manager’ı Kullanmalıyım ?
Tkinter ile GUI geliştirirken hangi manager’ı kullanacağınız hakkında kararsızsanız, avantaj ve dezavantajları ile ilgili bilgilerden yararlanabilirsiniz. Genel olarak, hangi manager’ın kullanılacağı, oluşturulan arayüzün karmaşıklığına, widget’ların yerleştirme şekline ve arayüzün farklı ekran boyutlarına uyumluluğuna bağlıdır. Basit ve hızlı bir düzen için pack manager tercih edilebilirken, daha karmaşık ve düzenli bir düzen için grid veya place manager’ları kullanılabilir. Uyumluluk ve esneklik önemliyse grid manager’ı, hassas düzenlemeler ve özel arayüz bileşenleri gerekiyorsa place manager’ı daha uygundur.
Aklınıza takılan bir şey olursa yorumlarda buluşalım 🙂 Yaptırmak istediğiniz projeleriniz içinde bize iletişim sayfamızdaki mail adreslerinden ulaşabilirsiniz. Bir sonraki bölümde görüşmek üzere 🙂
İlginizi çekebilecek diğer yazılarımız:
https://cagyazilim.com.tr/5-madde-de-makine-ogrenmesinin-kullanim-alanlari/
https://cagyazilim.com.tr/5-maddeyle-veri-gorsellestirme/
https://cagyazilim.com.tr/makine-ogrenmesi-siniflandirma-bolum-1/