Python ile Programlı Tkinter Arayüzlü Ohm Kanunu Hesaplayıcı
Python, nesneye yönelik bir programlama dilidir. Windows, Linux, Mac, Symbian gibi hemen hemen bütün platformlarda çalışabilmektedir. Bu haliyle taşınabilmektedir. Örneğin, Linux'ta hazırlanan program, işletim sistemine has fonksiyon veya modül kullanılmadığı takdirde değişiklik yapılmadan Windows ortamında veya başka ortamlarda da çalışmaktadır. Bunun yanında özgür bir dil olup kaynak kodu herkese açıktır. Python'a sahip olmak ücretsizdir ve dağıtımı serbesttir. Python için gerekli bilgiler ve programlar, www.python.org sitesinden indirelebilir.
Bu yazıda Python ile yapılmış bir uygulamada matematiksel işlem ve Tkinter ile arayüz örneği verilecektir. Sitenin ilgi alanı gereği bu örnek, daha önce yine bu sitede yayınlanan "Ohm Kanunu İçin Değer Hesaplayıcı" programının Python ile hazırlanmış hali olacaktır. Büylece programın daha kolay anlaşılır olacağı ve mukayese imkanı tanıyacağı düşünülmektedir. Ayrıca programın kullanıcı dostu olmasına özen gösterilmiştir.
Program, Pardus Linux üzerinde Python 2.4.4 versiyonu ile hazırlanmış olmakla birlikte Windows'ta da hiç bir değişiklik yapmadan çalışmaktadır. Windows'ta çalışırken arkapalanda siyah pencerenin çıkmaması için dosyanın uzantısının sonuna "w" harfini eklemek yeterlidir. Yani "ohmkanunu.py" olan dosya adını "ohmkanunu.pyw" olarak değiştirmek windows'taki komut satırının çıkması olayını ortadan kaldırıyor. Böylece program açılırken herhangibir Windows programı açılıyormuş gibi açılır.
Devrenin kaynak dosyasını tar.gz sıkıştırılmış dosya olarak indirmek için tıklayınız.
Devrenin kaynak dosyasını zip dosya olarak indirmek için tıklayınız.
Programın uygulamasından görüntüler:
Programın Linux'ta işlem yapmış haldeki görünümü:
Programın Linux'ta hatalı girişe tepkisi görünümü:
Programın Windows'ta işlem yapmış haldeki görünümü:
Programın Windows'ta hatalı girişe tepkisi görünümü:
Programın kodları:
#!/usr/bin/python # -*- coding: utf8 -*- """ Dosya Adi: ohmkanunu.py Baslik: OHM kanunu hesaplayici Yazan: Mehmet Yılmaz E-posta: mehmet.yilmaz@teknomerkez.net Tarih: 18.12.2007 -- Bu program Python 2.4.4 ile hazirlanmistir. -- Kullanici arayuzu icin Tkinter (Tcl/Tk) kullanilmistir. """ import sys from Tkinter import * def yeni(): # kutulari temizlemek icin global Etext # global, Etext degiskenini tum programda kullanilabilir yapiyor Etext="" Eyazi.set(Etext) global Itext Itext="" Iyazi.set(Itext) global Rtext Rtext="" Ryazi.set(Rtext) ekran.config(text="Yeni hesap için hazır", font=("bold", 12), bg="#004040", fg="white", bd=2, relief=SUNKEN) def formuller(): ekran.config(text="Formüller: E=I*R I=E/R R=E/I", font=("bold", 12), bg="#004040", fg="white", bd=2, relief=SUNKEN) def hakkinda(): ekran.config(text="Hazırlayan: Mehmet YILMAZ mehmet.yilmaz@www.teknomerkez.net", font=("normal", 10), bg="#004040", fg="white", bd=2, relief=SUNKEN) def yardim(): ekran.config(text="Yardım için, www.teknomerkez.net sitesine bakınız", font=("normal", 10), bg="#004040", fg="white", bd=2, relief=SUNKEN) def hesapla(): try: # sayi girilmisse (hata incelemesi yapiliyor, hata yoksa) EEE=Egiris.get() # kutulardaki bilgiler çagriliyor III=Igiris.get() RRR=Rgiris.get() if EEE<>"" and III<>"" and RRR<>"": ekran.config(text="Bütün kutular dolu, bilinmeyeni boşaltınız", font=("bold", 10), bg="red", fg="white", bd=2, relief=SUNKEN) #sonuc ekran etiketine (Label) yazildi elif EEE=="" and III=="" and RRR=="": ekran.config(text="Bütün kutular boş, bilinenleri doldurunuz", font=("bold", 10), bg="red", fg="white", bd=2, relief=SUNKEN) elif (EEE=="" and III=="" and RRR<>"") or (EEE<>"" and III=="" and RRR=="") or (III<>"" and EEE=="" and RRR==""): ekran.config(text="Dikkat! Kutuların biri boş, ikisi dolu olmalıdır", font=("bold", 10), bg="red", fg="white", bd=2, relief=SUNKEN) elif EEE<>"" and III<>"" and RRR=="": RR=float(EEE)/float(III) #Ondalik sayi girilebilmesi icin float() kullanildi ekran.config(text="R="+str(RR), font=("bold", 18), bg="#004040", fg="red", bd=2, relief=SUNKEN) elif EEE<>"" and III=="" and RRR<>"": II=float(EEE)/float(RRR) ekran.config(text="I="+str(II), font=("bold", 18), bg="#004040", fg="red", bd=2, relief=SUNKEN) elif EEE=="" and III<>"" and RRR<>"": EE=float(III)*float(RRR) ekran.config(text="E="+str(EE), font=("bold", 18), bg="#004040", fg="red", bd=2, relief=SUNKEN) except: #sayi disinda karakter girilmis ve islem yapılamıyorsa ekran.config(text="Sadece sayı giriniz! Hatalı giriş yaptınız!", font=("bold", 10), bg="red", fg="white", bd=2, relief=SUNKEN) pencere=Tk() pencere.title("Ohm Kanunu Değer Hesaplayıcı") # pencere basligi pencere.geometry("400x200") # pencere boyutlari Eyazi=StringVar() # global degiskenler icin Iyazi=StringVar() Ryazi=StringVar() Etext="" Itext="" Rtext="" # bilgilendirme amacli ekrani cagirma dugmeleri Button(text="Formüller", command=formuller, font=("bold", 10)).place(x=315, y=12, width=80, height=35) Button(text="Hakkında", command=hakkinda, font=("bold", 10)).place(x=315, y=50, width=80, height=35) Button(text="Yardım", command=yardim, font=("bold", 10)).place(x=315, y=90, width=80, height=35) # Gerilim Girisi Label(text="E=", font=("bold", 12)).place(x=10,y=60) Egiris=Entry() Egiris.config(textvariable=Eyazi, bg="white") Egiris.place(x=40,y=60,width=50) Label(text="Volt E=I*R", font=("normal", 10)).place(x=90,y=60) # Akim girisi Label(text="I=", font=("bold", 12)).place(x=10,y=90) Igiris=Entry() Igiris.config(textvariable=Iyazi, bg="white") Igiris.place(x=40,y=90,width=50) Label(text="Amper I=E/R", font=("normal", 10)).place(x=90,y=90) # Direnc girisi Label(text="R=", font=("bold", 12)).place(x=10,y=120) Rgiris=Entry() Rgiris.config(textvariable=Ryazi, bg="white") Rgiris.place(x=40,y=120,width=50) Label(text="Ohm R=E/I", font=("normal", 10)).place(x=90,y=120) # Ekran (islem sonuclarinin ve uyarılarin kullaniciya aktarildigi alan) ekran=Label() ekran.config(text="Yeni hesap için hazır", font=("bold", 12), bg="#004040", fg="white", bd=2, relief=SUNKEN) ekran.place(x=10,y=10,width=300,height=40) # islem yapma amacli dügmeler Button(text="Hesapla", command=hesapla, font=("bold", 16), bg="#E1F2F7").place(x=10, y=150, width=260, height=35) Button(text="Yeni", command=yeni, font=("bold", 12), bg="#E1F2F7").place(x=280, y=150, width=50, height=35) Button(text="Çıkış", command=sys.exit, font=("bold", 12), bg="#FFCCFF").place(x=340, y=150, width=50, height=35) pencere.mainloop()
Yorumlarınız
http://pythontr.org/
Bir yorum ekleyin
İzin verilen html etiketler (tag): <p><div><b><strong><i><u><del><hr><sup><sub><br>