#! python3
# -*- coding: utf-8 -*-
#programlayan : salim_yıldırım
#proje ismi: süt hesaplayıcı
#version = 1.1.7
from tkinter import *
import tkinter.ttk as ttk
from tkinter.messagebox import*
from tkinter.ttk import Notebook
from TitleFrame import *
import datetime
import time
import sqlite3
pencere = Tk()
vt = sqlite3.connect("süt_kayıt.db")
im = vt.cursor()
metin="""
Süt Hesaplayıcı basit bir S@lim yıldırım uygulamasıdır. S@lim Yıldırım
tarafından üretilmiştir.Ürününüz bol kazancınız çok olsun.
"""
ayımız = " "
vri_tarih = " "
grgr = []
yem_l = []
bulunduğunuz_ay = " "
def hesapla(event=None):
global ayımız, vri_tarih, yem_l, kayıt, grgr, bulunduğunuz_ay
sonuç_entry.delete(0, "end")
if not Combobox.get():
showerror("Hata!", "Bulunduğunuz ay'ı belirtmediniz!",
detail="Lütfen herhangi bir ay adı giriniz!")
return "break"
else:
if not Entry["Entry1"].get():
showerror("Hata!", "Bulunduğunuz yılı belirtmediniz!",
detail="Lütfen herhangi bir yıl adı giriniz!")
return "break"
else:
try:
#grgr grafik için bize günlerin
#listesini oluşturuyor.
grgr = []
yem_l = []
for i in range(11):
grgr.append(int and float(ei_dict["a{}".format(i)].get()))
for s in range(11):
grgr.append(int and float(e1i_dict["a{}".format(s)].get()))
for z in range(9):
grgr.append(int and float(e1s_dict["a{}".format(z)].get()))
for l in range(8):
yem_l.append(int and float(Entry["Entry{}".format(l+1)].get()))
iefs = sum(grgr)*(yem_l[1]) - ((yem_l[2] * yem_l[3]) + (yem_l[4] * yem_l[5]) + (yem_l[6] * yem_l[7]))
if iefs > 0:
m_tin="Alacak {} tl".format(iefs)
elif iefs == 0:
m_tin = "Başabaş"
else:
m_tin = "Borç {} tl".format(iefs)
sonuç_entry.insert(0, "Süt Tutarı {} tl, Yem Borcu {} tl, {}"
.format(sum(grgr)*(yem_l[1]), ((yem_l[2] * yem_l[3]) +
(yem_l[4] * yem_l[5]) + (yem_l[6] * yem_l[7])), m_tin))
ay = {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"}
hafta ={0: "Pazartesi", 1: "Salı", 2: "Çarşamba",
3: "Perşembe", 4: "Cuma", 5: "Cumartesi",
6: "Pazar"}
nummerone = list(ay.values()).index(Combobox.get())+1
bulunduğunuz_ay = int("{}{}".format(Entry["Entry1"].get(), nummerone))
vri_tarih = "{} {} {} {}. {}".format(time.strftime("%d"), ay[(datetime.date.today()).month],
(datetime.date.today()).year,
hafta[(datetime.date.today()).weekday()],
time.strftime("%H:%M:%S"))
except ValueError:
showerror("Hata!", "Lütfen sadece sayı girin!")
sonuç_entry.insert(0, "Sonuç ")
ayımız = Combobox.get()
TitleFrame.w = TitleFrame(pencere, "Süt Kartı") #TitleFarme'yi bu şekilde
TitleFrame.w.grid(row=2, column=0, pady=5, padx=5) #oluşturuyoruz.
cerceve1 = TitleFrame.w.getinner()
r = 0
c = 0
ei_dict = {}
while r < 11:
label = ttk.Label(cerceve1, text="{}.Gün".format(r+1))
label.grid(row=r, column=c, pady=1, ipady=1)
ei_dict["a%s"%r] = ttk.Entry(cerceve1, width=10)
ei_dict["a%s"%r].grid(row=r, column=(c+1), pady=1, ipady=1)
label = ttk.Label(cerceve1, text="{}.Gün".format(r+12))
label.grid(row=r, column=(c+2), pady=1, ipady=1)
ei_dict["a{}".format(r)].bind("", hesapla)
c += 1
if c % 1 == 0:
r += 1
c = 0
r = 0
c = 0
e1i_dict = {}
while r < 11:
e1i_dict["a%s"%r] = ttk.Entry(cerceve1, width=10)
e1i_dict["a%s"%r].grid(row=r, column=(c+3), pady=1, ipady=1)
e1i_dict["a{}".format(r)].bind("", hesapla)
c += 1
if c % 1 == 0:
r += 1
c = 0
r = 0
c = 4
e1s_dict = {}
while r < 9:
label = ttk.Label(cerceve1, text="{}.Gün".format(r+23))
label.grid(row=r, column=c, pady=1, ipady=1)
e1s_dict["a%s"%r] = ttk.Entry(cerceve1, width=10)
e1s_dict["a%s"%r].grid(row=r, column=(c+5), pady=1, ipady=1)
e1s_dict["a{}".format(r)].bind("", hesapla)
c += 1
if c % 1 == 0:
r += 1
c = 4
#---------yem kartı-------
TitleFrame.w = TitleFrame(pencere, "Yem Kartı")
TitleFrame.w.grid(row=2, column=1, pady=5, padx=5)
cerceve3 = TitleFrame.w.getinner()
bugün = datetime.date.today()
yıl = bugün.year
ay = {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"}
if bugün.month == 1:
ayi = ay[12]
yıli = yıl - 1
elif bugün.day < 10:
a = bugün.month - 1
ayi = ay[a]
yıli = yıl
else:
ayi = ay[bugün.month]
yıli = yıl
Combobox = ttk.Combobox(cerceve3, width=17)
Combobox["values"] =list(ay.values())
Combobox.set(ayi)
Combobox.grid(row=0, column=1, sticky="w", padx=3, pady=1)
Combobox.bind("", hesapla)
def seciminiz(event=None):
entrya = Combobox.get()
Combobox.bind("<>", seciminiz)
r = 0
c = 0
e_23dict = {}
while r < 11:
e_23dict["a%s"%r] = Label(cerceve3)
e_23dict["a%s"%r].grid(row=r, column=c, sticky="w", pady=2)
c += 1
if c % 1 == 0:
r += 1
c = 0
listi = ["Ay", "Yıl", "Litre Fiyatı", "Süt Yemi", "Fiyatı",
"Besi Yemi", "Fiyatı", "Küsbe", "Fiyatı"]
for i in range(9):
e_23dict["a{}".format(i)]["text"] = listi[int("{}".format(i))]
r = 1
c = 0
Entry = {}
while r < 9:
Entry["Entry%s"%r] = ttk.Entry(cerceve3)
Entry["Entry%s"%r].grid(row=(r), column=(c+1), pady=2)
Entry["Entry{}".format(r)].bind("", hesapla)
c += 1
if c % 1 == 0:
r += 1
c = 0
Entry["Entry1"].insert(0, yıli)
btn_pen2 = ttk.Button(pencere, width=98, text="Hesapla", command=hesapla)
btn_pen2.grid(row=1, column=0, pady=1, columnspan=2)
sonuç_entry = ttk.Entry(pencere,width=98, justify="right")
sonuç_entry.grid(row=0, column=0, columnspan=2, pady=6)
sonuç_entry.insert(0, "Sonuç")
kontrol2 = 0
def grafico():
# fırat hocamızın katkısıdır.
global kontrol2
if grgr == [] or not Combobox.get() and not Entry["Entry1"].get():
cevap = showwarning("Uyarı!" , "Lütfen Süt ve Yem Kartı'nı\
doldurduğunuzdan emin olunuz!")
elif len(Entry["Entry1"].get()) < 4:
showwarning("Uyarı!" , "Lütfen Süt ve Yem Kartı'nı\
doldurduğunuzdan emin olunuz!")
elif grgr != []:
if not kontrol2:
def sor1g():
global kontrol2
kontrol2 = 0
pencere3.destroy()
pencere3 = Toplevel()
pencere3.resizable()
pencere3.wm_protocol("WM_DELETE_WINDOW", sor1g)
cw = 670 #genişlik
ch = 413 #yükseklik
c = Canvas(pencere3, width=cw, height=ch, background="white")
c.grid(row=0, column=1, sticky="w", padx=10, pady=1)
# x düzlemindeki çizgi
c.create_line(12, ch, cw, ch)
# y düzlemindeki çizgi
c.create_line(10, 12, 10, ch)
for a, b in zip(range(12, ch, 100), range(100, 0, -25)):
#sol taraftaki kesikli çizgiler
c.create_line(13, a, 2000, a)
#kesikli çizgiler üzerindeki değerler
c.create_text(20, a, text=str(b))
x = 45
y = 55
veriler = grgr
limit = x * len(veriler)
while x <= limit:
for i in veriler:
#verileri gösteren çubuklar
c.create_rectangle(x, ch-(i*4),
y, ch,
outline="black",
fill="royalblue")
x += 20.5
y += 20.5
pencere3.title("{} yılının {} ayına ait Süt grafiği".format(round(yem_l[0]),ayımız))
kontrol2 = 1
else:
pass
kontrol = 0
def hakkında():
global kontrol
if not kontrol:
def sor1():
global kontrol
kontrol = 0
pencere4.destroy()
#proje hakkında bilgi veren penceremiz.
pencere4 = Toplevel()
pencere4.resizable(False, False)
pencere4.wm_attributes("-topmost", 1)
etiket=Label(pencere4, text=metin, font=("Flux",15, "bold"))
etiket.grid(row=9, column=0, sticky="w")
pencere4.title("Hakkında")
pencere4.wm_protocol("WM_DELETE_WINDOW", sor1)
kontrol = 1
else:
pass
kayıt_denetim = 0
def sor():
global kayıt_denetim
kayıt_denetim = 1
if grgr == []:
pencere.destroy()
elif grgr != []:
sorun=showwarning("Kapatılacak!" , "Program kapatılacak!",
detail="Süt ve Yem kartlarını kaydetmek istiyormusunuz?",
type=YESNOCANCEL)
if sorun == "no":
pencere.destroy()
if sorun == "cancel":
pass
if sorun == "yes":
kaydet()
if kayıt_denetim == 0:
pencere.destroy()
if kayıt_denetim == 1:
pass
##kaydet bölümümüz
def kaydet():
global grgr, kayıt_denetim
#grafik listesini boşaltıyoruz
#ki kayıttan sonra garfik göstermesin
isa = grgr
if grgr == [] or not Combobox.get() and not Entry["Entry1"].get():
showwarning("Uyarı!" , "Lütfen Süt ve Yem Kartı'nı\
doldurduğunuzdan emin olunuz!")
elif len(Entry["Entry1"].get()) < 4:
showwarning("Uyarı!" , "Lütfen Süt ve Yem Kartı'nı\
doldurduğunuzdan emin olunuz!")
else:
grgr = []
im.execute("""CREATE TABLE if not exists personel
(ay unique, litre_f, dökülen_süt, besi_yemi, b_fiyatı, süt_yemi,
s_fiyatı, küsbe, k_fiyatı, z, a_y, y_ı)""")
try:
im.execute("""INSERT INTO personel VALUES (
?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)""",
(bulunduğunuz_ay, yem_l[1], sum(isa), round(yem_l[4]),
yem_l[5], round(yem_l[2]), yem_l[3], round(yem_l[6]),
yem_l[7], vri_tarih, ayımız, round(yem_l[0])))
showinfo("Tamamlandı" , "{} yılı {} ayı ile ilgili veri başarıyla kaydedildi!"
.format(round(yem_l[0]),ayımız))
for i in range(11):
ei_dict["a{}".format(i)].delete(0, "end")
e1i_dict["a{}".format(i)].delete(0, "end")
for s in range(9):
e1s_dict["a{}".format(s)].delete(0, "end")
for si in range(7):
Entry["Entry{}".format(si+2)].delete(0, "end")
sonuç_entry.delete(0, "end")
sonuç_entry.insert(0, "Sonuç ")
kayıt_denetim = 0
# kayıttan sonra süt ve yem kartlarını boşaltıyoruz
# ki yeni veri girişine müsait olsunlar.
except sqlite3.IntegrityError:
#aynı değerde veri girilmesin diye hata yakalıyoruz.
soruni=showwarning("Uyarı!" , " {} yılının {} ayı ile ilgili kayıt zaten var!"
.format(yılımız,ayımız),
detail = "Var olan kayıt üzerine kayıt yapamazsınız!",
type=RETRYCANCEL)
if soruni == "cancel":
pass
if soruni == "retry":
hesapla()
kayıt_denetim = 1
vt.commit()
if not kontrolg :
pass
if kontrolg ==1:
pass
kontrolg = 0
k_bi_hak = 0
def gösterge_paneli():
global kontrolg
#süt takip kartının kodları
#try vasıtasıyla veri...
#tabanımız olmasa bile hata vermiyor.
try:
im.execute("""SELECT * FROM personel""")
c = im.fetchall()
if not c:
#veri tabanımız var ama içi boşsa
# hata vermesini önlüyoruz.
# bu şekilde toplevel'ın da açılmasını
#önlüyoruz. ki hem hata hemde
# toplevel açılmasın.
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!")
else:
if not kontrolg:
def sorg():
global kontrolg
kontrolg = 0
gösterge_paneli.destroy()
gösterge_paneli = Toplevel()
gösterge_paneli.title("Süt&Yem Takip Kartı")
gösterge_paneli.wm_attributes("-topmost", 1)
gösterge_paneli.resizable(False, False)
gösterge_paneli.wm_protocol("WM_DELETE_WINDOW", sorg)
im.execute("""SELECT * FROM personel""")
c = im.fetchall()
for i in c:
sütunlar = ["Ay" , "Yıl",]
anamenu = Menu(pencere, tearoff=0)
far = Frame(gösterge_paneli)
far.grid(row=0, column=0, padx=20, pady=20)
tabPanel = ttk.Notebook(far)
page = Frame(tabPanel, bg="light green")
page.grid(row=0, column=2, sticky="news", padx=3, pady=6)
page1 = Frame(tabPanel, background="white")
page1.grid(row=0, column=2, sticky="news", padx=3, pady=6)
page2 = Frame(tabPanel, background="white")
page2.grid(row=0, column=2, sticky="news", padx=3, pady=6)
tabPanel.add(page, text='Sonuç')
tabPanel.add(page1, text='Grafik')
tabPanel.add(page2, text='Analiz')
tabPanel.grid(row=0, column=2, ipadx=3, ipady=3)
r = 0
ci = 0
e_2dict = {}
e_23dict = {}
lis = ["Ay\t\t\t:", "Yıl\t\t\t:", "Toplam Dökülen Süt\t:", "litre fiyatı\t\t:",
"Süt Yemi Miktarı\t\t:", "Süt Yemi Fiyatı\t\t:", "Besi Yemi Miktarı\t\t:",
"Besi Yemi Fiyatı\t\t:", "Küsbe Miktarı\t\t:", "Küsbe Fiyatı\t\t:",
"Toplam Yem Borcu\t:", "Bürüt Kazanç/Borç\t:"]
for i in range(12):
e_23dict["a%s"%r] = Label(page)
e_23dict["a%s"%r].grid(row=r, column=ci+6, sticky="news", padx=3, pady=6)
e_2dict["a%s"%r] = ttk.Entry(page, width=50)
e_2dict["a%s"%r].grid(row=r, column=(ci+7), sticky="news", padx=3, pady=6)
e_2dict["a{}".format(i)].insert(0,"Veri Yok")
e_23dict["a{}".format(i)]["text"] = lis[int("{}".format(i))]
ci += 1
if ci % 1 == 0:
r += 1
ci = 0
tv = ttk.Treeview(far, columns=sütunlar,
show="headings")
tv.column('Ay', width = 100, anchor = 'center')
tv.column('Yıl', width = 100, anchor = 'center')
s = ttk.Scrollbar(far, orient=VERTICAL, command=tv.yview)
s.grid(column=1, row=0, sticky="news")
tv['yscrollcommand'] = s.set
for sütun in sütunlar:
tv.heading(sütun, text=sütun)
for değer in sorted(c):
tv.insert("", "end", values=(değer[10], değer[11]))
def sağtık(event):
satır = tv.identify_row(event.y)
if satır:
tv.selection_set(satır)
anamenu.tk_popup(event.x_root, event.y_root)
vt.commit()
im.execute("""SELECT * FROM personel""")
c = im.fetchall()
kontrolg = 1
def gösterici(event=None):
for s in range(12):
e_2dict["a{}".format(s)].delete(0, "end")
seçilen = tv.selection()
silinen = tv.item(item=seçilen)["values"]
önceki_id = tv.prev(item=seçilen)#analiz için kullan
önceki_txt = tv.item(item=önceki_id)["values"]
if seçilen :
for i in c:
if i[10] == silinen[0] and i[11] == silinen[1]:
ief = ((i[2] * i[1])-((i[5]* i[6])+(i[3]*i[4])+(i[7]*i[8])))
lisi = [i[10], i[11], i[2], i[1], i[5], i[6], i[3], i[4],
i[7], i[8], (i[5]* i[6])+(i[3]*i[4])+(i[7]*i[8]),
round(abs(ief))]
for i in range(12):
e_2dict["a{}".format(i)].insert(0, lisi[int("{}".format(i))])
if ief > 0:
e_23dict["a11"]["text"] = "Kazanç\t\t\t:"
elif ief == 0:
e_23dict["a11"]["text"] = "alacağınız yok"
else:
e_23dict["a11"]["text"] = "Borç\t\t\t:"
def bi_hak():
#burası hakkında bölümümüz. kaydettiğimiz verilerin
#hakkında bilgilerini buradan alıyoruz.
#mesela tam tarih , saat gibi.
#daha da geliştirilebilir.
global k_bi_hak
if not k_bi_hak:
def sorb():
global k_bi_hak
k_bi_hak = 0
hakkında.destroy()
hakkında = Toplevel()
k_bi_hak = 1
hakkında.title("Hakkında")
hakkında.wm_attributes("-topmost", 1)
hakkında.resizable(False, False)
hakkında.wm_protocol("WM_DELETE_WINDOW", sorb)
hakkında.columnconfigure(0, weight=1)
hakkında.rowconfigure(0, weight=1)
seçilen = tv.selection()
silinen = tv.item(item=seçilen)["values"]
tabPanel = ttk.Notebook(hakkında)
page = Frame(tabPanel, background="white")
page.grid(row=0, column=2, sticky="w", padx=3, pady=6)
tabPanel.add(page, text='Genel')
tabPanel.grid(row=0, column=2, padx=3, pady=3)
h_et = Label(page, justify="left", wraplength=300, bg="white")
h_et.grid(row=0, column=2)
if seçilen :
for i in c:
if i[10] == silinen[0] and i[11] == silinen[1]:
h_et["text"] = """
Program adı\t:Süt hesaplayıcı_v_1.1.7
Programlayan\t:S@lim Yıldırım
{3}
Dosya Adı \t: Süt&Yem Kartı {0} {1}\n
Kayıt Tarihi\t: {2}\n
Değiştirme\t:\t---\n
{3}
""".format(i[10], i[11], i[9], (54*"_"))
else:
pass
def sil():
seçilen = tv.selection()
silinen = tv.item(item=seçilen)["values"]
if seçilen :
for i in c:
if i[10] == silinen[0] and i[11] == silinen[1]:
sor = askyesno("DİKKAT!", "{} yılı {} ayı ile ilgili kaydı silmek istediğinize emin misiniz?"
.format(i[11], i[10]))
if sor:
im.execute("""DELETE FROM personel WHERE ay = ? """, (i[0],) )
vt.commit()
tv.delete(seçilen)
showinfo("Tamamlandı" , "{} yılının {} ayına ait kayıt silindi."
.format(i[11], i[10]))
tv.bind("", gösterici)
tv.bind("", sağtık)
tv.grid(row=0, column=0, sticky='news')
anamenu.add_command(label="Sil", command=sil)
anamenu.add_separator()
anamenu.add_command(label="Sonuç", command=gösterici)
anamenu.add_command(label="Hakkında", command=bi_hak)
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 Analiz():
"""
şu an için aktiv olmayan bu bölümde analiz yapmayı planlıyorum.
mesela iki tarih arasındaki süt, yem vb. artış yüzdeleri falan
hatta kullanıcıya öner verme falan .
"""
pass
menu= Menu(pencere)
pencere.config(menu=menu)
dosya= Menu(menu, tearoff=0)
menu.add_cascade(label="Dosya", menu=dosya)
dosya.add_command(label="Kaydet", command=kaydet)
dosya.add_command(label="Süt Takip Kartı", command=gösterge_paneli )
dosya.add_command(label="Çıkış", command=sor)
dosya2= Menu(menu, tearoff=0)
menu.add_cascade(label="Analiz",menu=dosya2)
dosya2.add_command(label="Analiz kartı", command=Analiz)
dosya3= Menu(menu, tearoff=0)
menu.add_cascade(label="Grafik",menu=dosya3)
dosya3.add_command(label="Aylık Süt Grafiği", command=grafico)
dosya5= Menu(menu, tearoff=0)
menu.add_cascade(label="Yardım",menu=dosya5)
dosya5.add_command(label="Süt Hesaplayıcı Hakkında", command=hakkında)
pencere.title("Süt hesaplayıcı v 1.1.7")
pencere.resizable(False, False)
pencere.wm_protocol("WM_DELETE_WINDOW", sor)
pencere.mainloop()