#! 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()
7 Ekim 2014 Salı
Yeni haliyle süt hesaplayıcı 1.1.7
Kaydol:
Kayıtlar (Atom)