Python Kurulumu

Python, masaüstü uygulama geliştirme için mükemmel bir programlama dilidir. Basit sözdizimi, geniş kütüphane desteği ve güçlü topluluk ekosistemi ile hem yeni başlayanlar hem de deneyimli geliştiriciler için ideal bir seçimdir.

Python'ı İndirme ve Kurma

Python'ın resmi web sitesi olan python.org adresinden işletim sisteminize uygun sürümü indirebilirsiniz. Windows kullanıcıları için önemli bir not: Kurulum sırasında "Add Python to PATH" seçeneğini işaretlemeyi unutmayın.

Önemli Not

Bu eğitimde Python 3.8 veya daha yeni bir sürüm kullanmanızı öneririz. Python 2.x artık desteklenmemektedir.

Kurulumu Doğrulama

Python'ın doğru şekilde kurulduğunu kontrol etmek için terminal veya komut istemcisinde şu komutu çalıştırın:

python --version
# veya
python3 --version

Tkinter Nedir?

Tkinter (Tk interface), Python ile birlikte gelen standart GUI (Graphical User Interface) kütüphanesidir. Tcl/Tk GUI toolkit'inin Python wrapper'ıdır ve Python kurulumu ile birlikte otomatik olarak gelir, bu nedenle ek kurulum gerektirmez.

Dahili Kütüphane

Python ile birlikte gelir, ek kurulum gerektirmez. Hemen kullanmaya başlayabilirsiniz.

Platform Bağımsız

Windows, macOS ve Linux'ta aynı kod ile çalışır. Bir kez yaz, her yerde çalıştır.

Öğrenme Dostu

Basit ve anlaşılır API'si ile GUI programlamaya giriş için idealdir.

Esnek Yapı

Basit uygulamalardan karmaşık arayüzlere kadar geniş bir yelpazede kullanılabilir.

İlk Tkinter Uygulaması

Şimdi ilk Tkinter uygulamamızı oluşturalım. Bu basit örnek, bir pencere açacak ve "Merhaba Dünya!" mesajını gösterecek:

import tkinter as tk

# Ana pencereyi oluştur
root = tk.Tk()
root.title("İlk Tkinter Uygulamam")
root.geometry("400x300")

# Bir etiket (label) oluştur
label = tk.Label(root, text="Merhaba Dünya!", font=("Arial", 16))
label.pack(pady=20)

# Uygulamayı çalıştır
root.mainloop()

Kod Açıklaması

import tkinter as tk

Tkinter kütüphanesini içe aktarır ve kısa bir isim (tk) verir.

tk.Tk()

Ana pencere nesnesini oluşturur. Bu, uygulamanızın temel konteyneridir.

title() ve geometry()

Pencerenin başlığını ve boyutlarını ayarlar.

mainloop()

Uygulamanın olay döngüsünü başlatır ve pencereyi görünür hale getirir.

Temel Widget'lar

Tkinter'da widget'lar, kullanıcı arayüzünün yapı taşlarıdır. İşte en yaygın kullanılan widget'lar:

Label (Etiket)

Metin veya resim göstermek için kullanılır:

label = tk.Label(root, text="Bu bir etikettir", fg="blue", bg="yellow")
label.pack()

Button (Düğme)

Kullanıcının tıklayabileceği düğmeler oluşturur:

def button_click():
    print("Düğmeye tıklandı!")

button = tk.Button(root, text="Tıkla", command=button_click)
button.pack()

Entry (Metin Girişi)

Tek satırlık metin girişi için kullanılır:

entry = tk.Entry(root, width=30)
entry.pack()

# Metni almak için
text = entry.get()

Text (Çok Satırlı Metin)

Çok satırlı metin girişi ve gösterimi için:

text_widget = tk.Text(root, height=10, width=40)
text_widget.pack()

# Metin eklemek için
text_widget.insert(tk.END, "Bu bir metin widget'ıdır")

Checkbutton (Onay Kutusu)

Açık/kapalı seçenekleri için:

var = tk.BooleanVar()
checkbutton = tk.Checkbutton(root, text="Seçenek", variable=var)
checkbutton.pack()

# Durumu kontrol etmek için
if var.get():
    print("Seçili")

Radiobutton (Radyo Düğmesi)

Birden fazla seçenek arasından tek seçim için:

var = tk.StringVar(value="secenek1")

radio1 = tk.Radiobutton(root, text="Seçenek 1", variable=var, value="secenek1")
radio2 = tk.Radiobutton(root, text="Seçenek 2", variable=var, value="secenek2")

radio1.pack()
radio2.pack()

Layout Yöneticileri

Tkinter'da widget'ları pencere içinde düzenlemek için üç ana layout yöneticisi vardır:

pack()

Widget'ları sırayla yerleştirir:

label1 = tk.Label(root, text="Üst", bg="red")
label2 = tk.Label(root, text="Alt", bg="blue")

label1.pack(side=tk.TOP, fill=tk.X)
label2.pack(side=tk.BOTTOM, fill=tk.X)

grid()

Widget'ları tablo benzeri bir düzende yerleştirir:

label1 = tk.Label(root, text="Satır 0, Sütun 0")
label2 = tk.Label(root, text="Satır 0, Sütun 1")
label3 = tk.Label(root, text="Satır 1, Sütun 0")

label1.grid(row=0, column=0, padx=5, pady=5)
label2.grid(row=0, column=1, padx=5, pady=5)
label3.grid(row=1, column=0, padx=5, pady=5)

place()

Widget'ları kesin koordinatlarla yerleştirir:

label = tk.Label(root, text="Kesin konum")
label.place(x=50, y=100)

Önemli Uyarı

Aynı parent widget içinde farklı layout yöneticilerini karıştırmayın. Bu beklenmedik sonuçlara yol açabilir.

Olay Yönetimi

GUI uygulamalarında kullanıcı etkileşimleri olaylar (events) şeklinde işlenir. Tkinter'da olayları yönetmenin çeşitli yolları vardır:

Command Parametresi

Button widget'ları için en yaygın yöntem:

def say_hello():
    print("Merhaba!")

button = tk.Button(root, text="Selam Ver", command=say_hello)
button.pack()

bind() Metodu

Daha gelişmiş olay yönetimi için:

def on_key_press(event):
    print(f"Basılan tuş: {event.keysym}")

def on_mouse_click(event):
    print(f"Mouse tıklandı: ({event.x}, {event.y})")

root.bind("", on_key_press)
root.bind("", on_mouse_click)  # Sol mouse tuşu

Kapsamlı Örnek: Basit Hesap Makinesi

import tkinter as tk

class Calculator:
    def __init__(self, root):
        self.root = root
        self.root.title("Basit Hesap Makinesi")
        self.root.geometry("300x400")
        
        # Sonuç gösterme alanı
        self.result_var = tk.StringVar()
        self.result_var.set("0")
        
        result_label = tk.Label(root, textvariable=self.result_var, 
                               font=("Arial", 20), bg="white", 
                               relief=tk.SUNKEN, anchor=tk.E)
        result_label.grid(row=0, column=0, columnspan=4, 
                         sticky="ew", padx=5, pady=5)
        
        # Düğmeler
        buttons = [
            ('C', 1, 0), ('±', 1, 1), ('%', 1, 2), ('÷', 1, 3),
            ('7', 2, 0), ('8', 2, 1), ('9', 2, 2), ('×', 2, 3),
            ('4', 3, 0), ('5', 3, 1), ('6', 3, 2), ('-', 3, 3),
            ('1', 4, 0), ('2', 4, 1), ('3', 4, 2), ('+', 4, 3),
            ('0', 5, 0), ('.', 5, 2), ('=', 5, 3)
        ]
        
        for (text, row, col) in buttons:
            if text == '0':
                btn = tk.Button(root, text=text, font=("Arial", 16),
                               command=lambda t=text: self.button_click(t))
                btn.grid(row=row, column=col, columnspan=2, 
                        sticky="ew", padx=2, pady=2)
            else:
                btn = tk.Button(root, text=text, font=("Arial", 16),
                               command=lambda t=text: self.button_click(t))
                btn.grid(row=row, column=col, sticky="ew", 
                        padx=2, pady=2)
        
        # Grid ağırlıklarını ayarla
        for i in range(4):
            root.grid_columnconfigure(i, weight=1)
        for i in range(6):
            root.grid_rowconfigure(i, weight=1)
    
    def button_click(self, value):
        current = self.result_var.get()
        
        if value == 'C':
            self.result_var.set("0")
        elif value == '=':
            try:
                # Basit hesaplama (güvenlik için eval yerine daha güvenli yöntemler kullanılmalı)
                result = eval(current.replace('×', '*').replace('÷', '/'))
                self.result_var.set(str(result))
            except:
                self.result_var.set("Hata")
        else:
            if current == "0":
                self.result_var.set(value)
            else:
                self.result_var.set(current + value)

# Uygulamayı çalıştır
if __name__ == "__main__":
    root = tk.Tk()
    app = Calculator(root)
    root.mainloop()

Özet

Bu derste Python ve Tkinter'ın temellerini öğrendiniz. Tkinter ile basit ama işlevsel GUI uygulamaları oluşturabilirsiniz. Bir sonraki derste, yapay zeka kavramlarına giriş yapacağız ve bu bilgileri nasıl masaüstü uygulamalarına entegre edebileceğimizi keşfedeceğiz.