Python ile Telefon Rehberi Programı (sqlite3,Tkinter,canlı arama sonuçları,ekleme+arama)

Python ile ne zamandır hayalini kurduğum telefon rehberi programının ilk versiyonunu yayımlamak istedim. Aslında üzerinde yapılması gereken birçok işlem var ama bu haliyle de geliştirilmeye açık. Örnek olarak silme işlemi ekleme fırsatım olmadı, aynı şekilde değiştirme de. Gerçi onlar birkaç SQL komutuyla hallolur. Zamanla geliştirip son sürümlerini de eklerim. Bu arada programı yazarken nesne de kullandım, pek işimi görmese de pratik olmasını istedim. Kodlar uzun olduğu için yazının devamına koyuyorum.

Öncelikle ana dosyamız rehber.py dosyasının içeriğini yazayım:

#-*-coding:utf8-*-
from Tkinter import *

# Daha sonra ekrana bastırmak için ufak bir tanıtım yazısı yazalım.
# Programın ne işe yaradığı anlaşılsın.
tanitim="""Python ve Tkinter ile kullanılan ayrıca sqlite3
ile bilgilerin saklandığı Rehber v0.01 BETA sürümünü kullanıyorsunuz.
Programın normali ya da üst sürümü de muhtemelen olmayacak.
Güray YILDIRIM
"""

anapencere=Tk()
# Başlık Ataması Yapalım:
anapencere.title("Rehber v0.01 BETA")
anapencere.geometry("800x600+15+100")

# Ufak bir açıklama girelim:
metin= Text(fg = "blue",font="Helvetica 13 bold")
metin.insert(END,tanitim)
metin.pack()

# Ekleme işi butonla olsun, yeni pencere açılsın(p1ac modülü)
def pencere():
    import p1ac
def pencere2():
    import ara

buton=Button(anapencere)
buton.config(text="Yeni Ekle",command=pencere)
buton.config(width=40,height=3,font=("Arial",15,"bold"),fg="#9933ff")
buton.pack(side=LEFT)

buton=Button(anapencere)
buton.config(text="Rehberde Ara",command=pencere2)
buton.config(width=40,height=3,font=("Arial",15,"bold"),fg="#9933ff")
buton.pack(side=RIGHT)

# Pencereyi ana döngüsüne sokalım.
anapencere.mainloop()

# Gerekli bilgileri verip isle modülü ile işlemi gerçekleştirelim.
def yeni(ad,soyad,no,no2):
    import isle
    yap=ekle()
    islem=yap.isle(ad,soyad,no,no2)
# Sonucu islem isimli değişkenle DÖNDÜRDÜK!

Daha sonra ise ekleme menüsü olan p1ac.py dosyasının içeriğine bakalım:

#-*-coding:utf8-*-
from Tkinter import *

def dbye(ad,soyad,tel1,tel2):
    import isle
    sinif=isle.ekle()
    islem=sinif.isles(ad,soyad,tel1,tel2)
    ust.config(text="Son Eklenen: %s %s" % (ad,soyad))

pencere1=Toplevel()
pencere1.title("Rehbere Yeni Kişi Ekle")

ust=Label(pencere1)
ust.config(text="Henüz ekleme yapılmadı.")
ust.pack()

iste=Label(pencere1)
iste.config(text="Lütfen İsmi Giriniz:")
iste.pack()

isim=Entry(pencere1)
isim.pack()

iste2=Label(pencere1)
iste2.config(text="Lütfen Soy Giriniz:")
iste2.pack()

soyisim=Entry(pencere1)
soyisim.pack()

iste3=Label(pencere1)
iste3.config(text="Lütfen İlk Telefon Numarasını Giriniz:")
iste3.pack()

tel1=Entry(pencere1)
tel1.pack()

iste4=Label(pencere1)
iste4.config(text="Lütfen Diğer Telefon Numarasını Giriniz:")
iste4.pack()

tel2=Entry(pencere1)
tel2.pack()
ss="fdh"

ekleme=Button(pencere1,text="Ekle!",command=lambda : dbye(isim.get(),soyisim.get(),tel1.get(),tel2.get()))
ekleme.pack()

Ardından ekleme menüsünün fonksiyonlarını yerine getiren isle.py dosyasına bakalım:

#-*-coding:utf8-*-

class ekle():
    def isles(self,ad,soyad,no,no2):
        import sqlite3

        self.baglanti=sqlite3.connect("xx.db")
        self.imlec=self.baglanti.cursor()
        self.imlec.execute("""INSERT INTO rehber(isim,soyisim,telefon,telefon2) VALUES(?, ?, ?, ?)""",(ad,soyad,no,no2))
        self.baglanti.commit()
        self.baglanti.close()

Son olarak arama kısmına geldik. Arama menüsü olan ara.py dosyasını inceleyelim:

#-*-coding:utf8-*-

from Tkinter import *

def sqlisimgonder(event):
    ad=isim.get()
    import sqlara
    gel=sqlara.isimdenara(ad)
    yz.config(text=gel)

def sqlnumgonder(event):
    num=numara.get()
    import sqlara
    gels=sqlara.numaradanara(num)
    yz.config(text=gels)

p2=Toplevel()
p2.title("Rehberde Arama Yap")

yz=Message(p2)
yz.config(text="Lütfen Aramak İstediğiniz İsmi Girin:")
yz.pack()

isim=Entry(p2)
isim.pack()

isim.bind("",lambda event: sqlisimgonder(event))

butisim=Button(p2,text="İsimden Ara",fg="blue",command=sqlisimgonder).pack()

yz2=Label(p2)
yz2.config(text="Lütfen Aramak İstediğiniz Numarayı Girin:")
yz2.pack()

numara=Entry(p2)
numara.pack()

numara.bind("",lambda event: sqlnumgonder(event))

butnumara=Button(p2,text="Numaradan Ara",fg="blue",command=sqlnumgonder).pack()

Ara dosyasında Tkinter ile alınan verileri kullanan sqlara.py dosyasını da inceleyelim:

#-*-coding:utf8-*-
import sqlite3

def isimdenara(ad):
    db=sqlite3.connect("xx.db")
    imlec=db.cursor()
    sonuc=imlec.execute("SELECT * FROM rehber WHERE isim=? OR soyisim=?", (ad,ad))
    sss=sonuc.fetchall()
    db.close()
    return sss

def numaradanara(num):
    db=sqlite3.connect("xx.db")
    imlec=db.cursor()
    sonuc=imlec.execute("SELECT * FROM rehber WHERE telefon LIKE ?", ("%"+num+"%",))
    sss=sonuc.fetchall()
    db.close()
    return sss

Not: sqlite veritabanı dosyasının ismi xx.db. Bu isimde bir dosya oluşturursanız program kodlarından içerisinde olması gereken tabloları görebilir ve bir sql sorgusuyla basitçe oluşturabilirsiniz. Kodlarda anlamadığınız ya da takıldığınız bir nokta olursa bildirmeniz yeterli.

 
comments powered by Disqus