Tkinter ile Namaz Saatleri Programı

Başlatan Tospaa, 04 Şubat 2017 - 18:38:32

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

Tospaa

Arkadaşlar, merhaba. Ben hem forumda hem de python konusunda yeniyim. Tkinter kütüphanesi ile bir proje başlattım ve epey güzel çalışıyor gibi görünüyor. Bir de siz deneyip kodlara bakarsanız ve önerilerinizi-yorumlarınızı sunarsanız çok sevinirim.


import urllib.request
from bs4 import BeautifulSoup
import tkinter
from time import strftime
from os.path import isfile

def sehirBul():
    sehir = giris.get()
    sehir = sehir.replace("İ", "I") #büyük i harfi olunca lower() fonksiyonu saçmalıyo. onu burda hallettim.
    sehir = sehir.lower()
    sehir = sehir.replace("ş", "s")
    sehir = sehir.replace("ı", "i")
    sehir = sehir.replace("ğ", "g")
    sehir = sehir.replace("ö", "o")
    sehir = sehir.replace("ü", "u")
    sehir = sehir.replace("ç", "c")
   
    if sehir == "adapazari" or sehir == "sakarya":
        sehir = "adapazari-sakarya"
    if sehir == "kocaeli":
        sehir = "izmit"
    if sehir == "afyonkarahisar":
        sehir = "afyon"
   
    return sehir

def siteBul():
    sehir = sehirBul()
       
    sehirLink = "http://www.namazvakti.net/turkiye/{0}-diyanet-ezan-vakitleri.html".format(sehir)
   
    page = urllib.request.urlopen(sehirLink)
    site = BeautifulSoup(page, "lxml") #lxml kütüphanesi yoksa bunu html.parser olarak değiştirebilirsin.
    return site

def kontrol():
    defter = open("data.txt").readlines()
    open("data.txt").close()
    if defter[0].startswith(strftime("%d %m %y")):
        durum = False
        for i in defter:
            if i.startswith(sehirBul()):
                durum = True
                break
        return durum
    else:
        return False

def mainFunc(*args):
    bilgiEtiket["fg"] = "black"
    bilgiEtiket["text"] = "Hesaplanıyor..."
    bilgiEtiket.update_idletasks()
   
    if isfile("data.txt"):
        kitap = open("data.txt").readlines()
        open("data.txt").close()
    else:
        open("data.txt","w").write("Selam\nDunya\n")
        open("data.txt").close()
        kitap = open("data.txt").readlines()
        open("data.txt").close()
   
    if kontrol():
        for index, item in enumerate(kitap):
            if item.startswith(sehirBul()):
                break
        arbList = str(kitap[index]).split()
       
        sabahLabel["text"] = arbList[1]
        ogleLabel["text"] = arbList[2]
        ikindiLabel["text"] = arbList[3]
        aksamLabel["text"] = arbList[4]
        yatsiLabel["text"] = arbList[5]
       
        bilgiEtiket["text"] = " "
    else:
        try:
            site = siteBul()
            sabahLabel["text"] = vakit("v im", site)
            ogleLabel["text"] = vakit("v og", site)
            ikindiLabel["text"] = vakit("v ik", site)
            aksamLabel["text"] = vakit("v ak", site)
            yatsiLabel["text"] = vakit("v ya", site)
           
            bilgiEtiket["text"] = "Sonlandırılıyor..."
            bilgiEtiket.update_idletasks()
           
            if kitap[0].startswith(strftime("%d %m %y")):
                veri = open("data.txt", "a")
                veri.write(sehirBul() + " " + sabahLabel["text"] + " " + ogleLabel["text"] + " " + ikindiLabel["text"] + " " + aksamLabel["text"] + " " + yatsiLabel["text"] + "\n")
                veri.close()
            else:
                veri = open("data.txt", "w")
                veri.write(strftime("%d %m %y") + "\n")
                veri.write(sehirBul() + " " + sabahLabel["text"] + " " + ogleLabel["text"] + " " + ikindiLabel["text"] + " " + aksamLabel["text"] + " " + yatsiLabel["text"] + "\n")
                veri.close()
           
            bilgiEtiket["text"] = " "
           
        except:
            sabahLabel["text"] = "00:00"
            ogleLabel["text"] = "00:00"
            ikindiLabel["text"] = "00:00"
            aksamLabel["text"] = "00:00"
            yatsiLabel["text"] = "00:00"
           
            bilgiEtiket["fg"] = "red"
            bilgiEtiket["text"] = "Ağ ya da girdi hatası."

def vakit(vak, siteSite):
    vakitList = []
   
    for ul in siteSite.find_all("ul",vak): #"ul" tagi içinde "vak" classında olanları al
        for li in ul.find_all("li"): #yukarıda aldığın "ul"ların içindeki "li" taglarını al
            vakitList.append(li.get_text()) #yukarıda bulduğun "li" taglarını "vakitList"e ekle
   
    strVakit = list(vakitList[1]) #listeden ikinci elemanı al ve listeye çevir
    strVakit = strVakit[-5:] #bu listenin son 5 karakterini al, gerisini sil
    strVakit = ''.join(strVakit) #kalan 5 karakteri stringe çevir
    return strVakit

pencere = tkinter.Tk()
pencere.resizable(False, False)
pencere.title("Namaz Vakit v0.3")
pencere.wm_iconbitmap("info")
pencere.bind('<Return>', mainFunc)
label1 = tkinter.Label(text = "Şehir giriniz: ")
giris = tkinter.Entry()
giris.insert(0, "Afyon")
buton = tkinter.Button(text = "Hesapla", command = mainFunc)
label2 = tkinter.Label(text = "Sabah Namazı: ", font = ("Helvetica", 20))
label3 = tkinter.Label(text = "Öğle Namazı: ", font = ("Helvetica", 20))
label4 = tkinter.Label(text = "İkindi Namazı: ", font = ("Helvetica", 20))
label5 = tkinter.Label(text = "Akşam Namazı: ", font = ("Helvetica", 20))
label6 = tkinter.Label(text = "Yatsı Namazı: ", font = ("Helvetica", 20))
bilgiEtiket = tkinter.Label(text = " ", font = ("Helvetica", 20))
sabahLabel = tkinter.Label(text = "00:00", font = ("Helvetica", 20))
ogleLabel = tkinter.Label(text = "00:00", font = ("Helvetica", 20))
ikindiLabel = tkinter.Label(text = "00:00", font = ("Helvetica", 20))
aksamLabel = tkinter.Label(text = "00:00", font = ("Helvetica", 20))
yatsiLabel = tkinter.Label(text = "00:00", font = ("Helvetica", 20))
label1.grid(row = 0, column = 0, sticky = "w")
giris.grid(row = 0, column = 1, padx = 10)
buton.grid(row = 1, column = 0, columnspan = 2, sticky = "we", pady = 20)
label2.grid(row = 2, column = 0, sticky = "w")
label3.grid(row = 3, column = 0, sticky = "w")
label4.grid(row = 4, column = 0, sticky = "w")
label5.grid(row = 5, column = 0, sticky = "w")
label6.grid(row = 6, column = 0, sticky = "w")
sabahLabel.grid(row = 2, column = 1, padx = 10)
ogleLabel.grid(row = 3, column = 1, padx = 10)
ikindiLabel.grid(row = 4, column = 1, padx = 10)
aksamLabel.grid(row = 5, column = 1, padx = 10)
yatsiLabel.grid(row = 6, column = 1, padx = 10)
bilgiEtiket.grid(row = 7, column = 0, columnspan = 2)

tkinter.mainloop()


Tabi çalışması için BeautifulSoup lazım. lxml olursa da yanında iyi olur.