Bölüm 2 – Tkinter ile Python’da GUI Uygulama Geliştirme: Sıfırdan İleri Seviyeye

Merhaba eğitim serimizin bu bölümünde temel Tkinter (Tk) öğelerinin yani widget’ların kullanımını öğreneceğiz. Tkinter’ın temel widget’ları arasında window, label, button, entry yer alır. Bu widget’lar, kullanıcının ihtiyaçlarına göre uyarlanabilen farklı özelliklere sahiptir. Widgetlarla ilgili sayfayı incelemek isterseniz:

https://docs.python.org/3/library/

Hazırsanız, widget’larının kullanımına başlayalım!

Tkinter Window

Bölüm 1’deki yazımızda pencerenin nasıl oluşturulacağına ve ne gibi ayarlamalar yapabiliceğimizi öğrenmiştik. Bu yazımızda temel özelliklerine tekrar değineceğiz. Ayrıntılı özellikleri Bölüm 1’de bulabilirsiniz. Göz atmak isteyenler için Bölüm 1 yazımız:

https://cagyazilim.com.tr/

Tkinter’da pencere (window) widget’ı, GUI’nin ana bileşenidir ve diğer widget’lar bu pencere üzerinde yer alır. Pencere widget’ı ayrıca, GUI’nin boyutunu, başlığını, simgesini ve diğer özelliklerini de ayarlamamızı sağlar.

Şimdi penceremizi oluşturarak işe başlayalım….

import tkinter as tk         # Tk modülünü içe aktararak işe başlıyoruz

root = tk.Tk()               # Penceremizi oluşturuyoruz

root.title("Tk-Bölüm2")      # Penceremizin başlığını ayarlıyoruz

root.geometry("500x500")     # Yatay ve dikey genişliğini ayarlıyoruz

root.mainloop()              # Son olarak penceremizi görebilmemiz için bu satırı yazıyoruz

Button

Tkinter’da buton (button) widget’ı, kullanıcının etkileşimli bir arayüz üzerinde bir işlem gerçekleştirmesini sağlayan bir bileşendir. Buton widget’ı, bir düğme şeklinde görüntülenir ve üzerine tıklandığında, kullanıcının belirli bir kod parçasını tetikleyerek bir işlem yapmasına olanak tanır. Kullanımına göz atalım…

Şimdi en klasiklerden ne zaman yeni bir dile başlanılsa kullanılan o sihirli sözcüğü yazan bir buton oluşturalım 🙂

def greet():        # Fonksiyonumuzu kullandığımız yerden yukarıda yazmayı unutmayalım!! 
  print("Merhaba Dünya")       
  
button = tk.Button(root, text = "Click me", command = greet)
button.pack()

Ee bunları yazdık ama ne işe yarıyor bu parametreler diyorsanız hemen açıklayalım.

Root : yukarıda oluşturduğumuz penceremiz. Butonumuzun hangi pencereye eklenmesini istiyorsak oluşturduğumuz o pencerenin adını veriyoruz. Text : butonumuzun üstünde ne yazmasını istiyorsak onu girdiğimiz parametremiz. Command: butonumuzun işlevini tanımladığımız fonksiyonun adını verdiğimiz parametre. Tekrar hatırlatalım fonksiyonunuzun kullandığınız yerin üstünde bir yerde bulunması gerekiyor. Aksi taktirde tanımlı olmadığına dair hata alıp sinirlenirsiniz 🙂

button.pack() ise butonumuzun pencereye yerleşmesini sağlıyor. Bunun farklı yollarıda var ama şimdi kafanızı karıştırmayalım. İlerleyen derslerimizden olan layerlar konusunda değineceğiz onlara.

Pekala şimdi butonumuzun farklı özelliklerine bakalım.

Parametre Açıklama
activebackgroundButona basıldığında butonun arka planının hangi renk olacağını belirler.
activeforegroundButona basıldığında butondaki yazının hangi renk olacağını belirler.
bg Butona basılı değilken arka planının rengini belirler.
fg Butona basılı değilken butondaki yazının rengini belirler.
state Butonun basılabilir ya da basılamaz halde olmasını sağlamak için kullanılır. Örneğin, kullanıcı bilgilerini tam girmediği sürece kaydolma butonunu aktif etmek istemiyoruz. “DISABLED” butonunuzun durumunu basılamaz; “ACTIVE” komutu ise basılabilir kılcaktır.
font Yazının şeklini ve boyutunu değiştirmenizi sağlar.
weightGenişliği ayarlar.
heightYüksekliği ayarlar.

Olayı özetlemek ve bu parametrelerde kısaca bir kaçının kullanımı göstermek adına tüm kodlarımızı birleştirelim.

import tkinter as tk     

root = tk.Tk()               
root.title("Buton Uygulama")      
root.geometry("250x250")    

def greet():        
  print("Merhaba Dünya")       
  
button = tk.Button(root, text = "Click me", 
                   activebackground = "red",
                   activeforeground="white",
                   bg = "purple",
                   fg = "#00ffff",
                   width = 10,
                   height = 2,
                   font="Arial 12",
                   command = greet)
button.pack()


root.mainloop()

Buton kodumuzun çıktısına bakalım :

Tkinter Bölüm 2 - Buton Uygulama Çıktısı

Fg’da niye öyle bir şey kullandık diyenlere. Renkleri direkt adlarıyla ya da böyle renk kodlarıyla da kullanabiliriz. Bu ışıltılı hayatı ben seçmedim ödevdi projeydi içim karardı ama arayüzüm rengarenk olsun isteyenler renk kodlarını aratarak rahatlıkla internette bulabilirler. Biz işinizi kolaylaştırıp iki link bırakalım ve diğer widget’a geçelim:

https://www.webucator.com/article/python-color-constants-module/

https://sites.google.com/view/paztronomer/blog/basic/python-colors

Label

Tkinter’da label widget’ı, bir GUI’de metin veya bir görüntüyü görüntülemek için kullanılan bir araçtır. İlk olarak bir metin için label oluşturalım ve özelliklerini görelim. Tabi ki “Merhaba Dünya” yazarak başlıyoruz 🙂

import tkinter as tk

root = tk.Tk()

label = tk.Label(root, text="Merhaba, Dünya!")
label.pack()

root.mainloop()

Şimdi bir de özelliklerine bakalım:

ParametreAçıklama
textYazmak istediğimiz yazıyı girdiğimiz parametre
fgYazının hangi renk olacağını belirleriz
bgArka planının ne renk olacağını belirleriz
anchorYazının pozisyonunu belirlemek için kullanılır
font Yazının şeklini ve boyutunu ayarlamada kullanılır

Parametreler tabi ki bunlarla sınırlı değil. Ben daha fazlasını öğrenmek istiyorum derseniz widgetların aratmanız yeterli olacaktır.

Label’ın görüntüyü koymaya da yaradığını söylemiştin o nerede diyorsanız işte o da bu kadar kolay:

import tkinter as tk

root = tk.Tk()

img = tk.PhotoImage(file="resim.png")

label = tk.Label(root, image=img)
label.pack()

root.mainloop()

Bir diğer widgetımız olan entry’ide öğrenip minik bir alıştırma yapalım sonrasında 🙂

Entry

Tkinter’da, kullanıcının girdiği metni almak için kullanılan bir araç olan Entry widget’ı bulunmaktadır. Entry widget’ı, bir metin kutusu gibi çalışır ve kullanıcının bir metin girmesine izin verir. Nasıl Entry oluşturabileceğimize bir bakalım :

import tkinter as tk

root = tk.Tk()

entry = tk.Entry(root)
entry.pack()

root.mainloop()

Ee böyle oluşturduk bu ne işe yaradı diyceksiniz. Tabi ki bu haliyle hiçbir işe yaramadı 🙂 Şimdi daha işlevsel bir kod yazalım hem de diğer öğrendiğimiz widget’larımızı kullanalım. Vücut kitle indeksimizi hesaplayabileceğimiz bir uygulama yapalım.

Not: Vücut kitle indeksi, vücut ağırlığının boy uzunluğunun karesine bölünmesiyle (kg/m²) hesaplanır. Çıkan sonuçlarda böyle sınıflandırılır. Tabi ki bu hesaplamada farklı faktörlerde etkili bunu sadece uygulama yapıp widgetları pekiştirelim diye yapıyoruz. Gerçekten vücut kitle indeksimi merak ediyorum diyenleri uygulamayı yaptıktan sonra arama çubuğuna alalım 🙂

  • 18.5 ve altı: Zayıf
  • 18.5 ile 24.9 arası: Normal
  • 25 ile 29.9 arası: Fazla kilolu
  • 30 ile 34.9 arası: Obezite Sınıfı I
  • 35 ile 39.9 arası: Obezite Sınıfı II
  • 40 ve üstü: Obezite Sınıfı III
import tkinter as tk

def hesapla_vki():
    if entry_name.get() and float(entry_kilo.get()) and float(entry_boy.get()):
        name = entry_name.get()
        kilo = float(entry_kilo.get())
        boy = float(entry_boy.get())
        vki = kilo / boy**2
        vki = round(vki, 2)
        
        if vki <= 18.5:
            durum = "Zayıf"
        elif vki > 18.5 and vki <= 24.9:
            durum = "Normal"
        elif vki >= 25 and vki <= 29.9:
            durum = "Fazla Kilolu"
        elif vki >= 30 and vki <= 34.9:
            durum = "Obezite Sınıfı I"
        elif vki >= 35 and vki <= 99.9:
            durum = "Obezite Sınıfı II"    
        elif vki >= 40 :
            durum = "Obezite Sınıfı III"    
        
        label_vki.config(text = "İsim : {} \n VKI : {}\n Durum : {}".format(name,vki,durum))
   
    else:
        label_vki.config(text = "Bilgiler eksik \n veya \n yanlış lütfen hepsini doğru giriniz !")

root = tk.Tk()
root.geometry("300x300")
root.title("Vücut Kitle İndeks Hesaplama")

label = tk.Label(root, text="Lütfen adınızı giriniz:")
label.pack()

entry_name = tk.Entry(root)
entry_name.pack()

label = tk.Label(root, text="Lütfen kilonuzu giriniz (Örn: 56.8):")
label.pack()

entry_kilo = tk.Entry(root)
entry_kilo.pack()

label = tk.Label(root, text="Lütfen boyunuzu giriniz (Örn: 1.65):")
label.pack()

entry_boy = tk.Entry(root)
entry_boy.pack()

label_vki = tk.Label(root, text="Vücut kitle indeksiniz:")
label_vki.pack()

button = tk.Button(root,text = "Hesapla",command = hesapla_vki)
button.pack()

root.mainloop()

Burada ne yaptığımızı açıklayarak bu bölümümüzü bitirelim. İlk olarak arayüzümüzü anlatıp oradan fonsiyonumuzun işleyişine geçelim. Penceremizi tanımlayıp boyutunu ve başlığı ayarlıyoruz. Ardından kutucuklara girilmesi gereken bilgileri label’larımız ile söylüyoruz. Entry’lerimizi kullanıcıdan veri almak için oluşturuyoruz. Bu uygulamada hem metin hem sayı nasıl alınır onu görmeniz için isim ve sayısal bilgi istedik. Butonumuzu hesaplama fonksiyonunu çağırmak için kullandık.

Fonskiyonumuza bakacak olursak ilk olarak bütün girdilerin tam girilip girilmediği if else yapısı ile kontrol ediliyor. Eğer bilgiler eksikse label’a uyarı yazısı yazdırıyor. Label’ın içindeki yazı nasıl güncellenir burada da onu görüyoruz. get() fonksiyonumuz girilen bilgileri almamızı sağlıyor. Aldığımız bilgileri formülde yerine koyarak vücut kitle indeksini hesaplıyoruz.

round(vki, 2) bu ne işe yarıyor derseniz float tipindeki sayımızın uçsuz bucaksız görünmesini engelliyor. Örneğin, sonucumuz 23.3333333333344555 gibi bir şey ise onu yuvarlayarak noktadan sonra 2 rakam olacak hale getiriyor.

If else yapılarıyla durumun sonucumuza göre ne olduğunu buluyor ve label’ın içine yazdırıyoruz.

\n : geldiği yerden sonrayı bir satır aşağı yazdırır.

“{}”.format : Bir bilgiyi değişkenle girmek istiyorsanız onun yerine parantez bırakır ve tırnakları kapattıktan sonra .format(değişkenin_adı) şeklinde o yere yazılmasını sağlarsınız.

Bu bölümümüzünde sonuna geldik. Aklınıza takılan bir şey olursa yorumlarda buluşalım. Yeni bölümlerde buluşmak üzere şimdilik hoşçakalın. Bolca pratik yapmayı unutmayın…

Bölüm 3’e göz atmak isterseniz: https://cagyazilim.com.tr/tkinter-ile-pythonda-gui-uygulama-gelistirme-3/

Post a comment.