17 Şubat 2013 Pazar

Python ile Arayüzlü Programlama

Daha önceki yazılarımda (Bkz. Python Programlama Dili, İkinci Temel Ödev ve Python ile Çözümü) Python ile siyah ekran (konsol, terminal) üzerinde çalışan basit programlar yapmış ve bunların nasıl işlediğini görmüştük. Bu programlar hem geliştirici hem de kullanıcı için hiç çekici değillerdi :) Şimdi bunları nasıl arayüzlü hale getirebileceğimize kısa bir giriş yapalım. Bu sayede hem Python bilgimizi biraz daha ilerletir, hem Python'un resmi arayüz kütüphanesi olan Tkinter'ı tanır, hem de mesleğimizle alakalı olan örnek problemimizin (İkinci Temel Ödev) Python ile nasıl arayüzlü olarak programlandığını görürüz.

Jeodezik Hesap adında bir programımız olsun ve bu program bizden formlar yardımıyla Y1, X1, Y2, X2 koordinatlarını alsın. Daha sonra bunlarla ilgili hesapları yapıp (bir fonksiyon yardımıyla) bize bir düğmeye (button) tıkladığımız zaman sonuçları göstersin. Lafı uzatmadan kaynak kodlarına gelecek olursak:

from tkinter import *
import math

pencere=Tk()
pencere.title("Jeodezik Hesap")
pencere.geometry("300x375")
pencere.resizable(FALSE, FALSE)

giris_yazi="Jedeozik Hesap \n (İkinci Temel Ödev Hesabı)"
giris=Label(text=giris_yazi, font="Verdana 10 bold", fg="red")
giris.pack(padx=5, pady=5)

def Hesap():
    y1=float(girdi_y1.get())
    x1=float(girdi_x1.get())
    y2=float(girdi_y2.get())
    x2=float(girdi_x2.get())

    dy=y2-y1
    dx=x2-x1

    aci=((200/math.pi)*(math.atan(dy/dx)))

    # Bolge Analizi
 
    if dy>0 and dx>0:
        aci=aci
    elif dy>0 and dx<0:
        aci=aci+200
    elif dy<0 and dx<0:
        aci=aci+200
    elif dy<0 and dx>0:
        aci=aci+400
    elif dx==0 and dy>0:
        aci=100
    elif dx==0 and dy<0:
        aci=300
    elif dx>=0 and dy==0:
        aci=0
    elif dx<0 and dy==0:
        aci=200
    else:
        aci=0
    
    cikti_semtacisi["text"]="Semt Açısı = " + str(aci) + " gon"

    mesafe=math.sqrt((pow(dy,2)+pow(dx,2)))
    
    cikti_mesafe["text"]="Mesafe = " + str(mesafe) + " m"
    
etiket_y1=Label(text="Y1", font="Verdana 9 bold")
etiket_y1.pack()

girdi_y1=Entry()
girdi_y1.pack(padx=5, pady=5)

etiket_y1=Label(text="X1", font="Verdana 9 bold")
etiket_y1.pack()

girdi_x1=Entry()
girdi_x1.pack(padx=5, pady=5)

etiket_y1=Label(text="Y2", font="Verdana 9 bold")
etiket_y1.pack()

girdi_y2=Entry()
girdi_y2.pack(padx=5, pady=5)

etiket_y1=Label(text="X2", font="Verdana 9 bold")
etiket_y1.pack()

girdi_x2=Entry()
girdi_x2.pack(padx=5, pady=5)

Hesapla=Button(text="Semt Açısı - Mesafe Hesapla", command=Hesap)
Hesapla.pack(padx=10, pady=10)

cikti_semtacisi=Label(font="Verdana 9 bold", fg="blue")
cikti_semtacisi.pack()

cikti_mesafe=Label(font="Verdana 9 bold", fg="blue")
cikti_mesafe.pack()

son_yazi="Ertan Taner Tunç - 17.02.2013"
son=Label(text=son_yazi, font="Verdana 8", fg="grey")
son.pack(padx=10, pady=10)

mainloop()

Eğer daha önceki yazılarımı okuyup kodları incelediyseniz nelerin yeni olduğunu hemen fark etmişsinizdir zaten. Eğer kodları anlamakta sıkıntı yaşıyorsanız önce Python 3 için http://www.istihza.com/beta/py3/icindekiler_python.html ve daha sonra da Tkinter 3 için http://www.istihza.com/beta/tk3/icindekiler_tkinter.html adreslerini ziyaret etmenizi öneririm. Ben burada Python programlama dersi vermekten ziyade kodlama mantığıyla ilgili örnekler (mesleki - meslek dışı) veriyorum.

Gördüğünüz üzere önce penceremizin parametreleri girilmiş daha sonra etiketler (label) ve formlar oluşturulmuş. Arada da Hesap fonksiyonu tanımlanmış. En sonda da bir düğme (button) yardımıyla bu fonksiyonun çalışabilmesi için komut verilmiştir. Kafanızda bir şeyler oluştuğunu umuyorum. Artık daha kullanıcı dostu programlar yazabilirsiniz :)

Programın .pyw dosyasını indirmek için tıklayınız.

Ekran Görüntüsü




Not: Programı Python 2 ile çalıştırabilmek için ilk satırı:

from Tkinter import *

olarak değiştirin. 

Hiç yorum yok:

Yorum Gönder