#! 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()
14 Ocak 2015 Çarşamba
süt hesaplayıcı
Kaydol:
Kayıtlar (Atom)