Teknomerkez
TR EN ES
Konular

Python ile Programlı Tkinter Arayüzlü Ohm Kanunu Hesaplayıcı

Yazar: Mehmet Yılmaz
Tarih: 30.12.2007
Türkçe

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

livetogogo - 31.01.2010
tşk.ederim. visual tkinter projemde kullanacağım..
http://pythontr.org/

Bir yorum ekleyin

İsim:
E-posta:
Yorumunuz:
Güvenlik Kodu:
 
Tüm alanları doldurmak zorunludur. Yorumunuz kontrol edilince yayınlanacaktır. E-posta adresi yayınlanmaz.
İzin verilen html etiketler (tag): <p><div><b><strong><i><u><del><hr><sup><sub><br>