#! python3
# -*- coding: utf-8 -*-
############################
# programlayan s@lim_yıldırım
# proje ismi süt hesaplayıcı
# version 0.0.1
# time 2013
############################
from tkinter import *
import tkinter as tk
import tkinter.ttk as ttk
from tkinter.messagebox import*
from datetime import date
from calendar import monthrange
import tkinter.scrolledtext as scrolledtext
import datetime, sqlite3, time, locale
class SütHesaplayıcı(tk.Tk):
def __init__(self):
tk.Tk.__init__(self)
self.veri_tabanı()
self.tarih_işlemleri()
self.ana_pen_araçları()
self.süt_kartı= []
self.yem_kartı = []
self.kayıt_denetim = 0
self.düzen_denetim = 0
self.takip_pen_kntrl = 0
def ana_pen_araçları(self, event=None):
self.çerçeve = {}
for f in range(2):
self.çerçeve["f%s"%f] = Frame()
self.çerçeve["f%s"%f].grid(row=f, column=1)
r = [2, 2, 3]
c = [1, 2, 1]
self.btn = {}
self.btn_kmt = [self.hesapla, self.kayıt, self.takip_pen_araçları]
self.fnk_lst = [self.d1, self.d2, self.d3]
self.btn_mtn = ["Hesapla", "Kaydet", "Takip Kartı"]
for self.b in range(len(self.btn_mtn)):
self.btn["b%s"%self.b] = tk.Button(self.çerçeve["f1"],
text = self.btn_mtn[self.b],
relief = "groove",
font = "Helvetica 11 bold",
bg = "#4A4A4A",
fg = "#00b6ff",
width = 11,
height=3,
command = self.btn_kmt[self.b])
self.btn["b%s"%self.b].grid(row=r[self.b], column=c[self.b], pady=1, padx=1)
self.btn["b%s"%self.b].bind("", self.fnk_lst[self.b])
self.btn["b%s"%self.b].bind("", self.ters_anm)
cer1 = ttk.Labelframe(self.çerçeve["f1"], text="Süt Kartı", width=100, height=100)
cer1.grid(row=0, column=0, rowspan=8)
cer2 = ttk.Labelframe(self.çerçeve["f1"], text="Tarih İşlemleri", width=100, height=100)
cer2.grid(row=0, column=1, columnspan=2)
cer3 = ttk.Labelframe(self.çerçeve["f1"], text="Yem kartı", width=100, height=100)
cer3.grid(row=1, column=1, columnspan=2)
cer4 = ttk.Labelframe(self.çerçeve["f0"], text="Sonuç", width=100, height=100)
cer4.grid(row=0, column=1)
self.süt_ilk_ent = {}
for g1 in range(16):
ttk.Label(cer1, text="%s.Gün"%(g1+1)).grid(row=g1, column=0)
self.süt_ilk_ent["a%s"%g1] = ttk.Entry(cer1, width=15)
self.süt_ilk_ent["a%s"%g1].grid(row=g1, column=1)
self.süt_ilk_ent["a%s"%g1].bind("", self.hesapla)
self.süt_ikinci_ent = {}
for g2 in range(15):
ttk.Label(cer1, text="%s.Gün"%(g2 + 17)).grid(row=g2, column=2)
self.süt_ikinci_ent["a%s"%g2] = ttk.Entry(cer1, width=15)
self.süt_ikinci_ent["a%s"%g2].grid(row=g2, column=3)
self.süt_ikinci_ent["a%s"%g2].bind("", self.hesapla)
self.comb = {}
cmb_set_lst = [self.ay, self.yıl]
cmb_vls_lst = [list(self.ay_listesi.values()), [self.yıl -i for i in range(20)]]
for c in range(2):
self.comb["a%s"%c] = ttk.Combobox(cer2, width=14,
values = cmb_vls_lst[c])
self.comb["a%s"%c].grid(row=0, column=c, sticky="w", pady=4)
self.comb["a%s"%c].bind("", self.hesapla)
self.comb["a%s"%c].set(cmb_set_lst[c])
self.ent_mtn = ["Litre Fiyatı", "Süt Yemi Fiyatı", "Süt Yemi Miktarı",
"Besi Yemi Fiyatı", "Besi Yemi Miktarı", "Küsbe Fiyatı", "Küsbe Miktarı"]
self.ym_krt_ent = {}
for y in range(7):
ttk.Label(cer3, text=self.ent_mtn[y]).grid(row=y, column=0, sticky="w")
self.ym_krt_ent["a%s"%y] = ttk.Entry(cer3)
self.ym_krt_ent["a%s"%y].grid(row=y, column=1)
self.ym_krt_ent["a%s"%y].bind("", self.hesapla)
self.sonuç = scrolledtext.ScrolledText(cer4, width=60, height=5)
self.sonuç.grid(row=0, column=0, pady=1, padx=2)
self.reklam_mtn = "Süt Hesaplayıcı Bir S@lim yıldırım Ürünüdür"
self.sonuç.insert(END, self.reklam_mtn.center(60, "-"))
def d1(self, event=None):
self.btn["b0"]["fg"] = "#FFF"
def d2(self, event=None):
self.btn["b1"]["fg"] = "#FFF"
def d3(self, event=None):
self.btn["b2"]["fg"] = "#FFF"
def ters_anm(self, event=None):
for b in range(3):
self.btn["b%s"%b]["fg"] = "#00b6ff"
def hesapla(self, event=None):
self.süt_kartı= []
self.yem_kartı = []
self.sonuç.delete(0.0, "end")
if not self.comb["a0"].get():
showerror("Hata!", "Bulunduğunuz ay'ı belirtmediniz!",
detail="Lütfen herhangi bir ay adı giriniz!")
self.sonuç.insert(END, self.reklam_mtn.center(60, "-"))
return "break"
else:
if not self.comb["a1"].get():
showerror("Hata!", "Bulunduğunuz yılı belirtmediniz!",
detail="Lütfen herhangi bir yıl adı giriniz!")
self.sonuç.insert(END, self.reklam_mtn.center(60, "-"))
return "break"
else:
try:
for h1 in range(16):
self.süt_kartı.append(int and float(self.süt_ilk_ent["a%s"%h1].get()))
for h2 in range(15):
self.süt_kartı.append(int and float(self.süt_ikinci_ent["a%s"%h2].get()))
for y in range(7):
self.yem_kartı.append(int and float(self.ym_krt_ent["a%s"%y].get()))
süt_tutarı = sum(self.süt_kartı)*(self.yem_kartı[0])
yem_borcu = ((self.yem_kartı[1] * self.yem_kartı[2]) +
(self.yem_kartı[3] * self.yem_kartı[4]) +
(self.yem_kartı[5] * self.yem_kartı[6]))
brüt_gelir = süt_tutarı - yem_borcu
if brüt_gelir > 0:
m_tin="Alacak {} tl".format(brüt_gelir)
elif brüt_gelir == 0:
m_tin = "Başabaş"
else:
m_tin = "Borç {} tl".format(abs(brüt_gelir))
snç_mtn = "Süt Tutarı {} tl\nYem Borcu {} tl\n{}".format(süt_tutarı,
yem_borcu, m_tin)
self.sonuç.insert(END, self.reklam_mtn.center(60, "-"))
self.sonuç.insert(END, snç_mtn)
self.ay_nmr = int and float(list(self.ay_listesi.values()
).index(self.comb["a0"].get())+1)
self.sıra_nmr = int and float("{}{}".format(self.comb["a1"].get(),
(self.ay_nmr/2)))
except ValueError:
showerror("Hata!", "Lütfen sadece sayı girin!")
self.sonuç.insert(END, self.reklam_mtn.center(60, "-"))
def takip_pen_araçları(self):
if not self.takip_pen_kntrl:
def takip_pen_sorgu():
self.takip_pen_kntrl = 0
gösterge_paneli.destroy()
try:
self.veritabanı.commit()
self.imge.execute("""SELECT * FROM süt""")
self.c = self.imge.fetchall()
gösterge_paneli = Toplevel()
gösterge_paneli.title("Süt&Yem Takip Kartı")
gösterge_paneli.resizable(False, False)
gösterge_paneli.wm_protocol("WM_DELETE_WINDOW", takip_pen_sorgu)
self.takip_pen_kntrl = 1
self.gösterge_far = {}
for f in range(4):
self.gösterge_far["a%s"%f]= Frame(gösterge_paneli)
self.gösterge_far["a%s"%f].grid(row=0, column=f, padx=2, pady=2)
self.cevap_l = {}
self.başlık_l = {}
başlık_listesi = ["Ay & Yıl", "Toplam Dökülen Süt", "Litre fiyatı",
"Süt Yemi Fiyatı", "Süt Yemi Miktarı", "Besi Yemi Fiyatı",
"Besi Yemi Miktarı", "Küsbe Fiyatı", "Küsbe Miktarı",
"Toplam Yem Borcu", "Bürüt Kazanç/Borç",
"Kayıt Tarihi", "Değiştirilme Tarihi"]
for i in range(13):
self.başlık_l["a%s"%i] = Label(self.gösterge_far["a1"],
text = başlık_listesi [i],anchor="w",
fg="white", bg="orange", width=15)
self.başlık_l["a%s"%i].grid(row=i, column=0, sticky="news", pady=1, padx=1)
self.cevap_l["a%s"%i] = Label(self.gösterge_far["a1"], width=25, bg="light green",
anchor="w")
self.cevap_l["a%s"%i].grid(row=i, column=1, sticky="news", pady=1, padx=1)
self.sütunlar = ["Ay" , "Yıl",]
self.sçnk_kts = ttk.Treeview(self.gösterge_far["a0"], columns=self.sütunlar,
show="headings", height=15)
scb = ttk.Scrollbar(self.gösterge_far["a0"],
orient=VERTICAL)
scb.grid(column=1, row=0, sticky="news")
self.sçnk_kts['yscrollcommand'] = scb.set
for sütun in range(2):
self.sçnk_kts.heading(self.sütunlar[sütun], text=self.sütunlar[sütun])
self.sçnk_kts.column(self.sütunlar[sütun], width = 100, anchor = 'center')
for değer in sorted(self.c):
self.sçnk_kts.insert("", "end", values=(değer[1], değer[2]))
self.sçnk_kts.bind("", self.takip)
self.sçnk_kts.bind("", self.sağtık)
self.sçnk_kts.grid(row=0, column=0, sticky='news')
except sqlite3.OperationalError:
showwarning("Uyarı!" , "Kayıtlı herhangi bir veri yok!",
detail = "Lütfen önce herhangi bir yılın herhangi bir ayına ait kayıt giriniz!")
def düzenle(self):
self.seçilen = self.sçnk_kts.selection()
self.silinen = self.sçnk_kts.item(item=self.seçilen)["values"]
if self.seçilen :
for i in self.c:
if i[1] == self.silinen[0] and i[2] == str(self.silinen[1]):
süt_kartı_ilk = eval(i[3])[0:16]
süt_kartı_iki = eval(i[3])[16:31]
yem_kartı = eval(i[4])
for trh in range(2):
self.comb["a%s"%trh].set(i[trh+1])
for g1 in range(16):
self.süt_ilk_ent["a%s"%g1].delete(0, "end")
self.süt_ilk_ent["a%s"%g1].insert(0, round(süt_kartı_ilk[g1]))
for g2 in range(15):
self.süt_ikinci_ent["a%s"%g2].delete(0, "end")
self.süt_ikinci_ent["a%s"%g2].insert(0, süt_kartı_iki[g2])
for y in range(7):
self.ym_krt_ent["a%s"%y].delete(0, "end")
self.ym_krt_ent["a%s"%y].insert(0, yem_kartı[y])
self.düzen_denetim = 1
def sil(self):
self.seçilen = self.sçnk_kts.selection()
self.silinen = self.sçnk_kts.item(item=self.seçilen)["values"]
if self.seçilen :
for i in self.c:
if i[1] == self.silinen[0] and i[2] == str(self.silinen[1]):
sor = askyesno("DİKKAT!", "%s yılı\
%s ayı ile ilgili kaydı silmek istediğinize emin misiniz?"%(i[2], i[1]))
if sor:
self.imge.execute("""DELETE FROM süt WHERE sıra = ? """, (i[0],) )
self.veritabanı.commit()
self.sçnk_kts.delete(self.seçilen)
showinfo("Tamamlandı" , "%s yılının %s ayına ait kayıt silindi."%(i[2], i[1]))
def sağtık(self, event):
self.anamenu = Menu(tearoff=0)
mn_k_listesi = [self.düzenle, self.sil, self.takip]
mn_i_listesi =["Düzenle", "Sil", "Sonuç"]
for m in range(3):
self.anamenu.add_command(label=mn_i_listesi[m],
command=mn_k_listesi[m])
satır = self.sçnk_kts.identify_row(event.y)
if satır:
self.sçnk_kts.selection_set(satır)
self.anamenu.tk_popup(event.x_root, event.y_root)
def takip(self, event=None):
self.seçilen = self.sçnk_kts.selection()
self.silinen = self.sçnk_kts.item(item=self.seçilen)["values"]
if self.seçilen :
for i in self.c:
if i[1] == self.silinen[0] and i[2] == str(self.silinen[1]):
süt_kartı = eval(i[3])
yem_kartı = eval(i[4])
yem_borcu = ((yem_kartı[1]*yem_kartı[2])+
(yem_kartı[3]*yem_kartı[4])+
(yem_kartı[5]*yem_kartı[6]))
bürüt_kznç = ((sum(süt_kartı)*yem_kartı[0])) - yem_borcu
takip_listesi = ["%s %s"%(i[1], i[2]), sum(süt_kartı), yem_kartı[0],
yem_kartı[1], round(yem_kartı[2]), yem_kartı[3],
round(yem_kartı[4]), yem_kartı[5], round(yem_kartı[6]),
yem_borcu, round(abs(bürüt_kznç)), i[5], i[6]]
for i in range(13):
self.cevap_l["a%s"%i]["text"] = takip_listesi[i]
if bürüt_kznç > 0:
self.başlık_l["a10"]["text"] = "Kazanç\t\t\t:"
self.başlık_l["a10"]["bg"]="blue"
self.cevap_l["a10"]["bg"]="blue"
elif bürüt_kznç == 0:
self.başlık_l["a10"]["text"] = "alacağınız yok"
self.başlık_l["a10"]["bg"]="firebrick"
self.cevap_l["a10"]["bg"]="firebrick"
else:
self.başlık_l["a10"]["text"] = "Borç\t\t\t:"
self.başlık_l["a10"]["bg"]="red"
self.cevap_l["a10"]["bg"]="red"
def veri_tabanı(self):
try:
self.veritabanı = sqlite3.connect("süt_hesaplayıcı.db")
self.imge = self.veritabanı.cursor()
except sqlite3.OperationalError:
pass
def kayıt(self):
if self.süt_kartı == [] or not self.comb["a0"].get() and not self.comb["a1"].get():
cevap = showwarning("Uyarı!" , "Lütfen Süt ve Yem Kartı'nı\
doldurduğunuzdan emin olunuz!")
elif len(self.comb["a1"].get()) < 4 or len(self.süt_kartı)<31 or len(self.yem_kartı)<7:
showwarning("Uyarı!" , "Lütfen Süt ve Yem Kartı'nı\
doldurduğunuzdan emin olunuz!")
else:
kayıt_tarihi = "{} {} {} {}. {}".format(time.strftime("%d"),
self.ay_listesi[self.bugün.month],
self.bugün.year,
self.gün[self.bugün.weekday()],
time.strftime("%X"))
değiştirme_tarihi = "---"
self.imge.execute("""CREATE TABLE if not exists süt
(sıra unique,ay, yıl, süt_listesi, yem_listesi, kayıt_tarihi, değiştirme_trh)""")
if self.düzen_denetim == 0:
try:
self.imge.execute("""INSERT INTO süt VALUES (
?, ?, ?, ?, ?, ?, ?)""",
(self.sıra_nmr, self.comb["a0"].get(), self.comb["a1"].get(),
str(self.süt_kartı), str(self.yem_kartı), kayıt_tarihi, değiştirme_tarihi))
showinfo("Tamamlandı" , "%s yılı %s ayı ile ilgili veri başarıyla kaydedildi!"
%(self.comb["a1"].get(), self.comb["a0"].get()))
for g1 in range(16):
self.süt_ilk_ent["a%s"%g1].delete(0, "end")
for g2 in range(15):
self.süt_ikinci_ent["a%s"%g2].delete(0, "end")
for y in range(7):
self.ym_krt_ent["a%s"%y].delete(0, "end")
cmb_set_lst = [self.ay, self.yıl]
for c in range(2):
self.comb["a%s"%c].set(cmb_set_lst[c])
self.sonuç.delete(0.0, "end")
self.sonuç.insert(END, self.reklam_mtn.center(60, "-"))
except sqlite3.IntegrityError:
soruni=showwarning("Uyarı!" , " %s yılının %s ayı ile ilgili kayıt zaten var!"
%(self.comb["a1"].get(), self.comb["a0"].get()),
detail = "Var olan kayıt üzerine kayıt yapamazsınız!",
type=RETRYCANCEL)
if self.düzen_denetim == 1:
devam = askyesno("Değiştirilecek", " %s yılının %s ayı ile ilgili kayıt değiştirilecek!"
%(self.comb["a1"].get(), self.comb["a0"].get()),
detail = "devam edilsin mi?",
type=YESNO)
if devam:
self.imge.execute("""UPDATE süt SET ay = ?, yıl= ?, süt_listesi= ?,
yem_listesi= ?, değiştirme_trh = ? WHERE sıra = ? """,
(self.comb["a0"].get(), self.comb["a1"].get(),
str(self.süt_kartı), str(self.yem_kartı), kayıt_tarihi, self.sıra_nmr))
self.veritabanı.commit()
for g1 in range(16):
self.süt_ilk_ent["a%s"%g1].delete(0, "end")
for g2 in range(15):
self.süt_ikinci_ent["a%s"%g2].delete(0, "end")
for y in range(7):
self.ym_krt_ent["a%s"%y].delete(0, "end")
cmb_set_lst = [self.ay, self.yıl]
for c in range(2):
self.comb["a%s"%c].set(cmb_set_lst[c])
self.sonuç.delete(0.0, "end")
self.sonuç.insert(END, self.reklam_mtn.center(60, "-"))
showinfo("Başarılı" , "%s yılı %s ayı ile ilgili veri başarıyla değiştirildi!"
%(self.comb["a1"].get(), self.comb["a0"].get()))
self.düzen_denetim = 0
def tarih_işlemleri(self):
locale.setlocale(locale.LC_ALL, 'turkish')
self.bugün = datetime.date.today()
self.yıl = self.bugün.year
self.ay = datetime.datetime.strftime(self.bugün, '%B')
self.ay_listesi = {1: "Ocak", 2: "Şubat", 3: "Mart",
4: "Nisan", 5: "Mayıs", 6: "Haziran",
7: "Temmuz", 8: "Ağustos", 9: "Eylül",
10: "Ekim", 11: "Kasım", 12: "Aralık"}
self.gün ={0: "Pazartesi", 1: "Salı", 2: "Çarşamba",
3: "Perşembe", 4: "Cuma", 5: "Cumartesi",
6: "Pazar"}
if __name__ == '__main__':
süt = SütHesaplayıcı()
süt.title("Süt Hesaplayıcı")
süt.resizable(False, False)
süt.mainloop()