14 Kasım 2014 Cuma

Labelframe

Windows 7 de Labelframe'nin görünümü

Labelframe tkinter grafik ara yüzünün parçası olan etiketli bir çerçevedir. Bir kompozisyon oluşturan
pencere araçlarını tek bir isim çatısında toplamak için kullanılır. Etiketli çerçevemiz frame gibi ızgara görevi görebilir. Yani istersek üzerine farklı pencere araçları yerleştirebilir ve bu araçların oluşturduğu kompozisyon doğrultusunda
çerçevemize en uygun olan isimi verebiliriz.
Bunun içinde Labelframe'mizin "text" isimli parametresinden faydalanırız. Gördüğünüz gibi etiketli çerçevemiz'de tkinter grafik arayüzümüzün diğer araçları gibi isimli ve isimsiz parametreler alabilir. Bunlar yükseklik, genişlik ve nereye ( pencere, Toplevel, Frame ve panedwindow )
konumlandırılacağı gibi belli parametrelerdir.






Aşağıdaki resimde anlatıldığı gibi tanımlanır. amaç doğrultusunda da içeriğindeki
parametreler kullanılır.

Labelframe fonksiyonu ve parametreleri

Labelframe ttk.Labelframe fonksiyonu kullanılarak oluşturulur:

lab_far = ttk.Labelframe(parametreler, text='Kullanıma özgü metin')

basit bir pencere içerisinde de aşağıdaki gibi kullanılır.

from tkinter import *
import tkinter.ttk as ttk

pencere = Tk()

f1 = ttk.Labelframe(pencere, text="Etiketli çerçeve", width=100, height=100)
f1.grid(row=0, column=0, sticky="news",  pady=5, padx=5)

pencere.title("3x serisinde Labelframe")
pencere.mainloop()


2x serisi içinde de aşağıdaki gibi olabilir. Yalnız 2x serisinde etiketli çerçevemizin (Labelframe'mizin) etiketi 3x serisindeki gibi mavi renkte değil siyah renkte olacaktır.

# -*- coding: cp1254 -*-
from Tkinter import *
import ttk as ttk

pencere = Tk()

f1 = ttk.Labelframe(pencere, text="Etiketli çerçeve", width=100, height=100)
f1.grid(row=0, column=0, sticky="news",  pady=5, padx=5)

pencere.title("2x serisinde Labelframe")
pencere.mainloop()


9 Ekim 2014 Perşembe

SizeGrip


SizeGrip pencerenin sağ alt köşesinde küçük bir kutu olup penceremizi yeniden boyutlandırmak için kullanılır . Ayrıca pencereye estetik bir görünümde sağlar. aslına bakarsanız SizeGrip olmasada pencerelerimizi boyutlandırabiliriz ama eğer kullandığınız programda boyutlandırılabilen ve boyutandırılamayan pencerelerimiz mevcutsa kullanıcımıza penceremizin boyutlandırılabilir olduğunu sezdirmek için sizegrip'i kullanabiliriz. Tabi ki bu pencere aracını kullanmak programcının tercihine kalmış birşeydir .

SizeGrip "ttk.Sizegrip" fonksiyonu kullanılarak oluşturulur:

ttk.Sizegrip().grid(column=999, row=999, sticky=(S,E))

veya

s_g = ttk.Sizegrip()
s_g.grid(column=999, row=999, sticky=(S,E))

şeklinde de yazılabilir.

sizegrip'i basit bir pencere içerisinde aşağıdaki gibi kullanabiliriz.

#! python3 
# -*- coding: utf-8 -*- 
 
from tkinter import *
import tkinter.ttk as ttk
 
pencere = Tk()
pencere.columnconfigure(0, weight=1)#menümüzün pencereyle
pencere.rowconfigure(0, weight=1)   #hareket etmesini sağlıyoruz
 
ttk.Sizegrip(pencere).grid(column=0, row=0, sticky=(S,E))
#Sizegrip bu şekilde tanımlanır.
 
pencere.title("Sizegrip")
pencere.geometry("300x300")
pencere.mainloop()

veya:

#! python3 
# -*- coding: utf-8 -*- 
 
from tkinter import *
import tkinter.ttk as ttk
 
pencere = Tk()
pencere.columnconfigure(0, weight=1)#menümüzün pencereyle
pencere.rowconfigure(0, weight=1)   #hareket etmesini sağlıyoruz

s_g = ttk.Sizegrip(pencere)#genel kullanım bu şekildedir.
s_g.grid(column=999, row=999, sticky=(S,E))

pencere.title("Sizegrip")
pencere.geometry("300x300")
pencere.mainloop()

bu şekilde de kodlayabilirsiniz.

2x serisi içinde şöyle düzenlememiz yeterlidir.

from Tkinter import *
import ttk as ttk

pencere = Tk()
pencere.columnconfigure(0, weight=1)
pencere.rowconfigure(0, weight=1)

s_g = ttk.Sizegrip(pencere)
s_g.grid(column=0, row=1, sticky=(S,E))

pencere.title("Sizegrip")
pencere.geometry("300x300")
pencere.mainloop()

bir önceki yazımdaki tab menü de de aşağıdaki gibi
kullanılabilir.

#! python3
# -*- coding: utf-8 -*- 

from tkinter import *
import tkinter.ttk as ttk
#3x serisinde ttk buşekilde 
#import ediliyor.
from tkinter.ttk import Notebook
#Notebook 3x serisinde
#bu şekilde içe aktarılıyor.

pencere = Tk()
pencere.columnconfigure(0, weight=1)
pencere.rowconfigure(0, weight=1)

tab_menü = ttk.Notebook()

b_farme = Frame(tab_menü, bg="light green")
i_farme = Frame(tab_menü, bg="light green")

b_ent = ttk.Entry(b_farme)
b_ent.grid(row=0, column=0, sticky="news")
b_ent.insert(0, "genel")

i_ent = ttk.Entry(i_farme)
i_ent.grid(row=0, column=0, sticky="w")
i_ent.insert(0, "özel")


tab_menü.add(b_farme, text='genel')
tab_menü.add(i_farme, text='özel')

tab_menü.grid(row=0, column=0, sticky="news")

s_g = ttk.Sizegrip(pencere)
s_g.grid(column=0, row=1, sticky=(S,E))

pencere.title("tab menü ve sizegrip kullanımı")
pencere.geometry("300x300")
pencere.mainloop()

2x serisi içinde yukarıdaki kodlar şu şekilde olabilir.

# -*- coding: cp1254 -*-
from Tkinter import *
import ttk as ttk
#2x serisinde ttk bu şekilde 
#import ediliyor.
from ttk import Notebook
#Notebook 2x serisinde
#bu şekilde içe aktarılıyor.

pencere = Tk()
pencere.columnconfigure(0, weight=1)
pencere.rowconfigure(0, weight=1)

tab_menu = ttk.Notebook()

b_farme = Frame(tab_menu, bg="light green")
i_farme = Frame(tab_menu, bg="light green")

b_ent = ttk.Entry(b_farme)
b_ent.grid(row=0, column=0, sticky="news")
b_ent.insert(0, "genel")

i_ent = ttk.Entry(i_farme)
i_ent.grid(row=0, column=0, sticky="w")
i_ent.insert(0, "özel")

tab_menu.add(b_farme, text='genel')
tab_menu.add(i_farme, text='özel')

tab_menu.grid(row=0, column=0, sticky="news")

s_g = ttk.Sizegrip(pencere)
s_g.grid(column=0, row=1, sticky=(S,E))

pencere.title(u"tab menü ve sizegrip kullanımı")
pencere.geometry("300x300")
pencere.mainloop()

7 Ekim 2014 Salı

Yeni haliyle süt hesaplayıcı 1.1.7

#! 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()

18 Eylül 2014 Perşembe

Tab menü

Tab menü bir dizi sekmeli sayfalar bütünüdür.Her bir sekme "altında" kendine has bir  sayfa  barındırır . Bu sayfalar farklı pecere araçalarıyla şekillendirilebilir. Sayfalar bağlanmış olduğu  sekmeye tıklanarak görüntülenebilir.Sekmeler üst kenar boyunca görüntülenir. İsteğe bağlı olarak, tab menü sekme olmadan da oluşturulabilir.


#3x serisi içindir
#! python3 
# -*- coding: utf-8 -*- 

from tkinter import *
from tkinter.ttk import Notebook #3x serisinde bu şekilde import ediliyor.

pencere = Tk()

pencere.columnconfigure(0, weight=1)#menümüzün pencereyle
pencere.rowconfigure(0, weight=1)   #hareket etmesini sağlıyoruz.

tabPanel = Notebook()

page = Frame(tabPanel, background="light green")#herbir başlık için
pagei = Frame(tabPanel, bg="white")#birer farme oluşturmamız şart.

b1 = Entry(page)#birinci başlığın entrisi
b1.grid(row=0, column=0, sticky="news")
b1.insert(0, "genel")

b2 = Entry(pagei)#ikinci başlığın entrisi
b2.grid(row=0, column=0, sticky="news")
b2.insert(0, "özel")

tabPanel.add(page, text='genel')#birinci başlık
tabPanel.add(pagei, text='özel')#ikinci başlık böyle tanımlanıyor
tabPanel.grid(row=0, column=0, sticky="news")#grid yönetcisini kullanıyoruz.

pencere.title("tab menü")
pencere.geometry("300x300")
pencere.mainloop()




aşağıdaki kodlarda sınıflı bir yapıya ait

#! python3
# -*- coding: utf-8 -*- 
from tkinter import *
from tkinter.ttk import Notebook#3x serisinde bu şekilde import ediliyor.

class Uygulama(Frame):
    def __init__(self, master, *args, **kw):
        Frame.__init__(self, master, *args, **kw)
        tabPanel = Notebook(master, style="")
        
        icerik = "Icerik %d"
        baslik = "Baslik %d"
        
        for i in range(10):
            page = Frame(tabPanel)
            
            sv = StringVar(value= icerik % i)
            lbl = Label(master=page, textvariable=sv, background="bisque")
            lbl.pack(expand=1,fill=BOTH)
            
            tabPanel.add(page, text=baslik % i)
        tabPanel.pack(expand=1, fill=BOTH)

root = Tk()
app = Uygulama(root)
root.geometry("500x500+200+200")
app.mainloop()


ayrıca tab menü ile ilgili istihza da ki bu başlığa da bakabilirsiniz. eğer ingilizceniz iyiyse şuradanda bilgi edinebilirsiniz.

14 Eylül 2014 Pazar

süt hesaplayıcı 1.1.6 versiyonu

süt hesaplayıcı basit bir hesap makinesidir. hesaplamak, kaydetmek ve kaydedilen veriyi kullanıcıya yeniden göstermek gibi temel fonksiyonlara sahiptir. geliştirilme aşamasında olduğu için bazı eksik ve kusurları pek tabi olarak var. 

ayrıca TitleFrame modülüne de Buradan ulaşabilirsiniz.



#! python3
# -*- coding: utf-8 -*-
#yazan : salim yıldırım 
#proje ismi: süt hesaplayıcı
#version = 1.1.6

from tkinter import *
import tkinter.ttk as ttk
from tkinter.messagebox import *
from TitleFrame import *
import wckToolTips
import datetime
import time
import sqlite3


pencere = Tk()

vt = sqlite3.connect("süt_kayıt.db")
im = vt.cursor()


metin1="{} yılı {} ayı süt döküm fişine göre toplamda {} litre süt dökmüş olup {} tl gelir elde ettiniz.{} ayı boyunca {} torba süt yemi, {} torba besi yemi ve \
{} torba küsbe olmak üzere toplamda {} torba yem aldınız.süt yeminin birim fiyatı {} tl\'den {} tl , besi yemini {} tl\'den {} tl ve küsbede de {} tl\'den {} tl \
sütcünüze borçlandınız. Toplamda {} tl borçlanmış olup son duruma göre {} tl {}.bilgilerinize arz ederim."

metin="""
Süt Hesaplayıcı basit bir S@lim yıldırım uygulamasıdır.
Halil Efendi Çiftliği Yazılım Köyü Adına S@lim Yıldırım
tarafından üretilmiştir. Halil Efendi Çiftliği Yazılım
Köyü tarım ve hayvancılık  sektörüne yönelik basit programlar
üreten ve AR-GE çalışmaları yapan bir S@lim Yıldırım
kuruluşudur. ürününüz bol kazancınız çok olsun.
"""
           
ayımız = " "
yılımız = " "
vri_tarih = " "
sonuç=0
grgr = []
y1 = 0
y2 = 0
y3 = 0
y4 = 0
y5 = 0
y6 = 0
sayı1=0
sayı12=0
süt_yemi=0
besi_yemi=0
küsbe=0
toplam_yem_miktarı=0
toplam_yem_borcu=0
bulunduğunuz_ay = " "
brüt_kazanç = 0
def hesapla(event=None):
    
    global ayımız, yılımız, vri_tarih, y1, y2, y3, y4, y5, y6, sayı1, sayı12, süt_yemi, besi_yemi
    global küsbe, toplam_yem_miktarı, toplam_yem_borcu, kayıt, bulunduğunuz_ay, brüt_kazanç, sonuç, grgr

    sonuç_entry.delete(0, "end")
    toplam_entry.delete(0, "end")
    
    if not combo.get():
        showerror("Hata!", "Bulunduğunuz ay'ı belirtmediniz!",
                  detail="Lütfen herhangi bir ay adı giriniz!")
        return "break"
        
    else:    
        if not yıln.get():
            showerror("Hata!", "Bulunduğunuz yılı belirtmediniz!",
                      detail="Lütfen herhangi bir yıl adı giriniz!")
            return "break"
        else:
            try:
                ayımız = combo.get()
                yılımız = yıln.get()
            except ValueError:
                showerror("Hata!", "Lütfen sadece sayı giriniz!" )

            else:
                try:
            
                    g1=int and float(entry2.get())
                    g2=int and float(entry3.get())
                    g3=int and float(entry4.get())
                    g4=int and float(entry5.get())
                    g5=int and float(entry6.get())
                    g6=int and float(entry7.get())
                    g7=int and float(entry8.get())
                    g8=int and float(entry9.get())
                    g9=int and float(entry10.get())
                    g10=int and float(entry11.get())
                    g11=int and float(entry12.get())
                    g12=int and float(entry14.get())
                    g13=int and float(entry15.get())
                    g14=int and float(entry16.get())
                    g15=int and float(entry17.get())
                    g16=int and float(entry18.get())
                    g17=int and float(entry19.get())
                    g18=int and float(entry20.get())
                    g19=int and float(entry21.get())
                    g20=int and float(entry22.get())
                    g21=int and float(entry23.get())
                    g22=int and float(entry24.get())
                    g23=int and float(entry26.get())
                    g24=int and float(entry27.get())
                    g25=int and float(entry28.get())
                    g26=int and float(entry29.get())
                    g27=int and float(entry30.get())
                    g28=int and float(entry31.get())
                    g29=int and float(entry32.get())
                    g30=int and float(entry33.get())
                    g31=int and float(entry34.get())
                    bulunduğunuz_ay = "{}/{}".format(combo.get(), yıln.get())
        
                    y1=int(entry35.get())
                    y2=int and float(entry36.get())
                    y3=int(entry37.get())
                    y4=int and float(entry38.get())
                    y5=int(entry39.get())
                    y6=int and float(entry40.get())
                    sayı12=int and float(entryf.get())
            
                    sonuç_entry["text"]= "{}".format(sonuç)
                    grgr = [g1, g2, g3, g4, g5, g6, g7, g8,
                            g9, g10, g11, g12, g13, g14, g15,
                            g16, g17, g18, g19, g20, g21, g22,
                            g23, g24, g25, g26, g27, g28, g29, g30, g31]
            #grgr grafik için bize günlerin
            #listesini oluşturuyor.
        
                    sonuç = sum(grgr)#sum metotu listemizdeki sayıları topluyor.
                    sayı1 = sayı12 * sonuç
                    süt_yemi= y1 * y2
                    besi_yemi= y3 * y4
                    küsbe= y5 * y6
                    toplam_yem_miktarı= y1 + y3 + y5
                    toplam_yem_borcu= süt_yemi + besi_yemi + küsbe
                    toplam = toplam_yem_borcu
                    brüt_kazanç= sayı1 - toplam
                    toplam_entry.insert(0, toplam)
                    sonuç_entry.insert(0, sonuç)

                    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"}
        
                    bugün = datetime.date.today()
                    yıl = bugün.year
                    gün = hafta[bugün.weekday()]
                    r_gün = time.strftime("%d")
                    saatimiz = time.strftime("%H:%M:%S")
                    vri_tarih = "{} {} {} {}. {}".format(r_gün, ay[bugün.month], yıl, gün, saatimiz)
       
                except ValueError:
                    showerror("Hata!", "Lütfen sadece sayı girin!")
                

TitleFrame.w = TitleFrame(pencere, "Süt Kartı")     #TitleFarme'yi bu şekilde
TitleFrame.w.grid(row=0, column=0, pady=5, padx=5)  #oluşturuyoruz.
cerceve1 = TitleFrame.w.getinner()
    
etiket2= ttk.Label(cerceve1, text="1.Gün |")
etiket2.grid(row=1, column=0, sticky="w", pady=1, ipady=1)
entry2 = ttk.Entry(cerceve1, width=10)
entry2.grid(row=1, column=1, pady=1)
entry2.focus_set()

wckToolTips.register(entry2, "1. gün ")# ipucu metnimiz.

etiket3= ttk.Label(cerceve1, text="2.Gün |")
etiket3.grid(row=2, column=0, sticky="w", pady=1, ipady=1)
entry3 = ttk.Entry(cerceve1, width=10)
entry3.grid(row=2, column=1, pady=1)

wckToolTips.register(entry3, "2. gün")

etiket4= ttk.Label(cerceve1, text="3.Gün |")
etiket4.grid(row=3, column=0, sticky="w", pady=1, ipady=1)
entry4 = ttk.Entry(cerceve1, width=10)
entry4.grid(row=3, column=1, pady=1)

wckToolTips.register(entry4, "3. gün")

etiket5= ttk.Label(cerceve1, text="4.Gün |")
etiket5.grid(row=4, column=0, sticky="w", pady=1, ipady=1)
entry5 = ttk.Entry(cerceve1, width=10)
entry5.grid(row=4, column=1, pady=1)

wckToolTips.register(entry5, "4. gün")

etiket6= ttk.Label(cerceve1, text="5.Gün |")
etiket6.grid(row=5, column=0, sticky="w", pady=1, ipady=1)
entry6 = ttk.Entry(cerceve1, width=10)
entry6.grid(row=5, column=1, pady=1)

wckToolTips.register(entry6, "5. gün")

etiket7= ttk.Label(cerceve1, text="6.Gün |")
etiket7.grid(row=6, column=0, sticky="w", pady=1, ipady=1)
entry7 = ttk.Entry(cerceve1, width=10)
entry7.grid(row=6, column=1, pady=1)

wckToolTips.register(entry7, "6. gün")

etiket8= ttk.Label(cerceve1, text="7.Gün |")
etiket8.grid(row=7, column=0, sticky="w", pady=1, ipady=1)
entry8 = ttk.Entry(cerceve1, width=10)
entry8.grid(row=7, column=1, pady=1)

wckToolTips.register(entry8, "7. gün")

etiket9= ttk.Label(cerceve1, text="8.Gün |")
etiket9.grid(row=8, column=0, sticky="w", pady=1, ipady=1)
entry9 = ttk.Entry(cerceve1, width=10)
entry9.grid(row=8, column=1, pady=1)

wckToolTips.register(entry9, "8. gün")

etiket10= ttk.Label(cerceve1, text="9.Gün |")
etiket10.grid(row=9, column=0, sticky="w", pady=1, ipady=1)
entry10 = ttk.Entry(cerceve1, width=10)
entry10.grid(row=9, column=1, pady=1)

wckToolTips.register(entry10, "9. gün")
    
etiket11= ttk.Label(cerceve1, text="10.Gün|")
etiket11.grid(row=10, column=0, sticky="w", pady=1, ipady=1)
entry11 = ttk.Entry(cerceve1, width=10)
entry11.grid(row=10, column=1, pady=1)

wckToolTips.register(entry11, "10. gün")

etiket12= ttk.Label(cerceve1, text="11.Gün|")
etiket12.grid(row=11, column=0, sticky="w", ipady=1)
entry12 = ttk.Entry(cerceve1, width=10)
entry12.grid(row=11, column=1)

wckToolTips.register(entry12, "11. gün")

etiket14= ttk.Label(cerceve1, text="12.Gün|")
etiket14.grid(row=1, column=2, sticky="w", ipady=1)
entry14 = ttk.Entry(cerceve1, width=10)
entry14.grid(row=1, column=3)

wckToolTips.register(entry14, "12. gün")

etiket15= ttk.Label(cerceve1, text="13.Gün|")
etiket15.grid(row=2, column=2, sticky="w")
entry15 = ttk.Entry(cerceve1, width=10)
entry15.grid(row=2, column=3)

wckToolTips.register(entry15, "13. gün")

etiket16= ttk.Label(cerceve1, text="14.Gün|")
etiket16.grid(row=3, column=2, sticky="w")
entry16 = ttk.Entry(cerceve1, width=10)
entry16.grid(row=3, column=3)

wckToolTips.register(entry16, "14. gün")

etiket17= ttk.Label(cerceve1, text="15.Gün|")
etiket17.grid(row=4, column=2, sticky="w")
entry17 = ttk.Entry(cerceve1, width=10)
entry17.grid(row=4, column=3)

wckToolTips.register(entry17, "15. gün")

etiket18= ttk.Label(cerceve1, text="16.Gün|")
etiket18.grid(row=5, column=2, sticky="w")
entry18 = ttk.Entry(cerceve1, width=10)
entry18.grid(row=5, column=3)

wckToolTips.register(entry18, "16. gün")

etiket19= ttk.Label(cerceve1, text="17.Gün|")
etiket19.grid(row=6, column=2, sticky="w")
entry19 = ttk.Entry(cerceve1, width=10)
entry19.grid(row=6, column=3)

wckToolTips.register(entry19, "17. gün")

etiket20= ttk.Label(cerceve1, text="18.Gün|")
etiket20.grid(row=7, column=2, sticky="w")
entry20 =  ttk.Entry(cerceve1, width=10)
entry20.grid(row=7, column=3)

wckToolTips.register(entry20, "18. gün")

etiket21= ttk.Label(cerceve1, text="19.Gün|")
etiket21.grid(row=8, column=2, sticky="w")
entry21 = ttk.Entry(cerceve1, width=10)
entry21.grid(row=8, column=3)

wckToolTips.register(entry21, "19. gün")

etiket22= ttk.Label(cerceve1, text="20.Gün|")
etiket22.grid(row=9, column=2, sticky="w")
entry22 = ttk.Entry(cerceve1, width=10)
entry22.grid(row=9, column=3)

wckToolTips.register(entry22, "20. gün")

etiket23= ttk.Label(cerceve1, text="21.Gün|")
etiket23.grid(row=10, column=2, sticky="w")
entry23 = ttk.Entry(cerceve1, width=10)
entry23.grid(row=10, column=3)

wckToolTips.register(entry23, "21. gün")

etiket24= ttk.Label(cerceve1, text="22.Gün|")
etiket24.grid(row=11, column=2, sticky="w")
entry24 = ttk.Entry(cerceve1, width=10)
entry24.grid(row=11, column=3)

wckToolTips.register(entry24, "22. gün")

etiket26= ttk.Label(cerceve1, text="23.Gün|")
etiket26.grid(row=1, column=4, sticky="w")
entry26 = ttk.Entry(cerceve1, width=10)
entry26.grid(row=1, column=5)

wckToolTips.register(entry26, "23. gün")

etiket27= ttk.Label(cerceve1, text="24.Gün|")
etiket27.grid(row=2, column=4, sticky="w")
entry27 = ttk.Entry(cerceve1, width=10)
entry27.grid(row=2, column=5)

wckToolTips.register(entry27, "24. gün")

etiket28= ttk.Label(cerceve1, text="25.Gün|")
etiket28.grid(row=3, column=4, sticky="w")
entry28 = ttk.Entry(cerceve1, width=10)
entry28.grid(row=3, column=5)

wckToolTips.register(entry28, "25. gün")

etiket29= ttk.Label(cerceve1, text="26.Gün|")
etiket29.grid(row=4, column=4, sticky="w")
entry29 = ttk.Entry(cerceve1, width=10)
entry29.grid(row=4, column=5)

wckToolTips.register(entry29, "26. gün")

etiket30= ttk.Label(cerceve1, text="27.Gün|")
etiket30.grid(row=5, column=4, sticky="w")
entry30 = ttk.Entry(cerceve1, width=10)
entry30.grid(row=5, column=5)

wckToolTips.register(entry30, "27. gün")

etiket31= ttk.Label(cerceve1, text="28.Gün|")
etiket31.grid(row=6, column=4, sticky="w")
entry31 = ttk.Entry(cerceve1, width=10)
entry31.grid(row=6, column=5)

wckToolTips.register(entry31, "28. gün")

etiket32= ttk.Label(cerceve1, text="29.Gün|")
etiket32.grid(row=7, column=4, sticky="w")
entry32 = ttk.Entry(cerceve1, width=10)
entry32.grid(row=7, column=5)

wckToolTips.register(entry32, "29. gün")

etiket33= ttk.Label(cerceve1, text="30.Gün|")
etiket33.grid(row=8, column=4, sticky="w")
entry33 = ttk.Entry(cerceve1, width=10)
entry33.grid(row=8, column=5)

wckToolTips.register(entry33, "30. gün")

etiket34= ttk.Label(cerceve1, text="31.Gün|")
etiket34.grid(row=9, column=4, sticky="w")
entry34 = ttk.Entry(cerceve1, width=10)
entry34.grid(row=9, column=5)

wckToolTips.register(entry34, "31. gün")

cerceve3i = Frame()
cerceve3i.grid(row=2, column=0, pady=1, padx=1)

entry34.bind("", hesapla)
#---------yem kartı-------
#yem bilgimizi buraya giriyoruz.
TitleFrame.w = TitleFrame(pencere, "Yem Kartı")
TitleFrame.w.grid(row=0, column=1, pady=5, padx=5)
cerceve3 = TitleFrame.w.getinner()
wckToolTips.register(cerceve3, "Yem Kartı")
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"}

    
liste = ["Ocak",
        "Şubat",
        "Mart",
        "Nisan",
        "Mayıs",
        "Haziran",
        "Temmuz",
        "Ağustos",
        "Eylül",
        "Ekim",
        "Kasım",
        "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


yıll= ttk.Label(cerceve3, text="Yıl")
yıll.grid(row=0, column=0, sticky="w", pady=2)
yıln = ttk.Entry(cerceve3, width=20)
yıln.grid(row=0, column=1, pady=1)        
yıln.insert(0, yıli)

ayl= ttk.Label(cerceve3, text="Ay")
ayl.grid(row=1, column=0, sticky="w", pady=2)    
combo = ttk.Combobox(cerceve3, width=17)
combo["values"] = liste
combo.set(ayi)
combo.grid(row=1, column=1, sticky="w", padx=3, pady=1)

wckToolTips.register(combo, "Ay")

def seciminiz(event=None):
    entrya = combo.get()

combo.bind("<>", seciminiz)
    
etiketf= ttk.Label(cerceve3, text="Litre Fiyatı")
etiketf.grid(row=2, column=0, sticky="w", pady=2)
entryf = ttk.Entry(cerceve3)
entryf.grid(row=2, column=1, pady=2)
     
etiket35= ttk.Label(cerceve3, text="Süt Yemi")
etiket35.grid(row=3, column=0, sticky="w", pady=2)
entry35 = ttk.Entry(cerceve3)
entry35.grid(row=3, column=1, pady=2)

etiket36= ttk.Label(cerceve3, text="Fiyatı")
etiket36.grid(row=4, column=0, sticky="w", pady=2)
entry36 = ttk.Entry(cerceve3)
entry36.grid(row=4, column=1, pady=2)

etiket37= ttk.Label(cerceve3, text="Besi Yemi")
etiket37.grid(row=5, column=0, sticky="w", pady=2)
entry37 = ttk.Entry(cerceve3)
entry37.grid(row=5, column=1, pady=2)

etiket38= ttk.Label(cerceve3, text="Fiyatı")
etiket38.grid(row=6, column=0, sticky="w", pady=2)
entry38 = ttk.Entry(cerceve3)
entry38.grid(row=6, column=1, pady=2)

etiket39= ttk.Label(cerceve3, text="Küsbe")
etiket39.grid(row=7, column=0, sticky="w", pady=2)
entry39 = ttk.Entry(cerceve3)
entry39.grid(row=7, column=1, pady=2)

etiket40= ttk.Label(cerceve3, text="Fiyatı")
etiket40.grid(row=8, column=0, sticky="w", pady=2)
entry40 = ttk.Entry(cerceve3)
entry40.grid(row=8, column=1, pady=2)

etiket40= ttk.Label(cerceve3, text="")
etiket40.grid(row=9, column=0, sticky="w", pady=4)

cerceve2s = Frame(pencere)
cerceve2s.grid(row=1, column=0, columnspan=2, pady=1, padx=6)

TitleFrame.w = TitleFrame(cerceve2s, "Sonuç")
TitleFrame.w.grid(row=1, column=1, columnspan=2, pady=5, padx=5)
cerceve3i = TitleFrame.w.getinner()

yemi = "Yem Kartı"
toplam_entry = ttk.Entry(cerceve3i, width=85, justify="right")
toplam_entry.grid(row=0, column=1, padx=5)
toplam_entry.insert(0, yemi)

süti = "Süt Kartı  "
sonuç_entry = ttk.Entry(cerceve3i, width=85, justify="right")
sonuç_entry.grid(row=1, column=1, pady=6)
sonuç_entry.insert(0, süti)

btn_pen2 = ttk.Button(cerceve3i,
                      text="Hesapla",
                      command=hesapla)
btn_pen2.grid(row=0, column=0, pady=1)

wckToolTips.register(btn_pen2, "Hesapla")

btn_pen = ttk.Button(cerceve3i,
                     text="Kaydet")
btn_pen.grid(row=1, column=0, pady=1)

        
entry40.bind("", hesapla)

kontrol2 = 0
def grafico():
    # fırat hocamızın katkısıdır. 
    global kontrol2
    if grgr == [] or not combo.get() and not yıln.get():
        cevap = showwarning("Uyarı!" , "Lütfen Süt ve Yem Kartı'nı\
 doldurduğunuzdan emin olunuz!")
    
    elif len(yıln.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.wm_iconbitmap("graph.ico")
            pencere3.resizable()
            pencere3.wm_protocol("WM_DELETE_WINDOW", sor1g)
            cw = 670 #genişlik
            ch = 500 #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(10, ch, cw, ch)

            # y düzlemindeki çizgi
            c.create_line(10, 15, 10, ch) 

            for a, b in zip(range(10, ch, 10), range(100, 0, -2)):
                #sol taraftaki kesikli çizgiler
                c.create_line(0, a, 20, a)
                #kesikli çizgiler üzerindeki değerler
                c.create_text(30, a, text=str(b)) 

            x = 45 
            y = 55
            veriler = grgr
            ##veriler = [random.randint(0, 100) for i in range(10)]
            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("%s yılının %s ayına ait Süt grafiği"%(yılımız, 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)
        pencere4.wm_iconbitmap("quest.ico")
        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

kontrol1 = 0        
def hakkında1():
    global kontrol1
    
    if grgr == [] or not combo.get() and not yıln.get():
        cevap = showwarning("Uyarı!" , "Lütfen Süt ve Yem Kartı'nı\
 doldurduğunuzdan emin olunuz!")
    
    elif len(yıln.get()) < 4:
        showwarning("Uyarı!" , "Lütfen Süt ve Yem Kartı'nı\
 doldurduğunuzdan emin olunuz!")
    
    elif grgr != []:
        if not kontrol1:
            def sor11():
                global kontrol1
                kontrol1 = 0
                pencere61.destroy()
            pencere61 = Toplevel()
            pencere61.title("sonuç")
            pencere61.wm_attributes("-topmost", 1)
            pencere61.wm_protocol("WM_DELETE_WINDOW", sor11)
            kontrol1 = 1
            etiket = Label(pencere61, font=("Flux",15, "bold"), justify="left", wraplength=500)
            
            if brüt_kazanç > 0:
                sonuçi="alacağınız bulunmaktadır"
            elif brüt_kazanç == 0:
                sonuçi="alacağınız bulunmamaktadır"
            else:
                sonuçi="borcunuz bulunmaktadır"

            etiket["text"] =  metin1.format(yılımız, ayımız, sonuç, sayı1, ayımız, y1, y3,
                                        y5, toplam_yem_miktarı, y2, süt_yemi, y4, besi_yemi,
                                        y6, küsbe, toplam_yem_borcu, round(abs(brüt_kazanç)),
                                        sonuçi) 
            etiket.grid(row=0, column=0, sticky="w")
            
        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
    grgr = []
    if sonuç == 0 or not combo.get() and not yıln.get():
        showwarning("Uyarı!" , "Lütfen Süt ve Yem Kartı'nı\
 doldurduğunuzdan emin olunuz!")
    elif len(yıln.get()) < 4:
        showwarning("Uyarı!" , "Lütfen Süt ve Yem Kartı'nı\
doldurduğunuzdan emin olunuz!")
        
    else:
        z = vri_tarih
        ay = bulunduğunuz_ay
        litre_f = sayı12
        dökülen_süt = sonuç
        besi_yemi = y3
        b_fiyatı = y4
        süt_yemi = y1
        s_fiyatı = y2
        küsbe = y5
        k_fiyatı = y6
    
        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)""")
        try:
            im.execute("""INSERT INTO personel VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)""", (ay, litre_f, dökülen_süt, besi_yemi, b_fiyatı, süt_yemi, s_fiyatı, küsbe, k_fiyatı, z))
                                                                                          
                                                                                          
            showinfo("Tamamlandı" , "{} yılı {} ayı ile ilgili veri başarıyla kaydedildi!".format(yılımız,ayımız))
            entry2.delete(0, "end")
            entry3.delete(0, "end")
            entry4.delete(0, "end")
            entry5.delete(0, "end")
            entry6.delete(0, "end")
            entry7.delete(0, "end")
            entry8.delete(0, "end")
            entry9.delete(0, "end")
            entry10.delete(0, "end")
            entry11.delete(0, "end")
            entry12.delete(0, "end")
            entry14.delete(0, "end")
            entry15.delete(0, "end")
            entry16.delete(0, "end")
            entry17.delete(0, "end")
            entry18.delete(0, "end")
            entry19.delete(0, "end")
            entry20.delete(0, "end")
            entry21.delete(0, "end")
            entry22.delete(0, "end")
            entry23.delete(0, "end")
            entry24.delete(0, "end")
            entry26.delete(0, "end")
            entry27.delete(0, "end")
            entry28.delete(0, "end")
            entry29.delete(0, "end")
            entry30.delete(0, "end")
            entry31.delete(0, "end")
            entry32.delete(0, "end")
            entry33.delete(0, "end")
            entry34.delete(0, "end")
            entryf.delete(0, "end")
            entry35.delete(0, "end")
            entry36.delete(0, "end")
            entry37.delete(0, "end")
            entry38.delete(0, "end")
            entry39.delete(0, "end")
            entry40.delete(0, "end")
            sonuç_entry.delete(0, "end")
            toplam_entry.delete(0, "end")
            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.geometry("600x300")
                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",]
                    değerler = i[0]
      
                anamenu = Menu(pencere, tearoff=0)
                TitleFrame.w = TitleFrame(gösterge_paneli, "Süt&Yem Takip")
                TitleFrame.w.grid(row=0, column=0, columnspan=3, pady=5, padx=5)
                cerceve2 = TitleFrame.w.getinner()

                cerceve3i4 = Frame(cerceve2)
                cerceve3i4.grid(row=0, column=0, padx=10, pady=10)

                cerceve3i4t = Frame(cerceve2)
                cerceve3i4t.grid(row=0, column=1, padx=10, pady=10)

                etiket = Label(cerceve3i4t, justify="left", wraplength=300)
                etiket["text"] = "Şu an için seçili herhangi bir veri yok! kayıtlı tarihlerin yem\
 ve süt kartını görmek için çift tıklamanız yeterli. "
                etiket.grid(row=0, column=2)


    
                
                tv = ttk.Treeview(cerceve3i4, columns=sütunlar,
                                  show="headings")
                
                for sütun in sütunlar:
                    tv.heading(sütun, text=sütun)

   
                for değer in c:
                    tv.insert("", "end", values=değer)

                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):
                    seçilen = tv.selection()
                    silinen = tv.item(item=seçilen)["values"]
                    if seçilen :
                        for i in c:
                            if i[0] == silinen[0]:
                                aysi  = i[0]
                                tam_tarih = aysi.split("/")
                                ay = tam_tarih[0]
                                yıl = tam_tarih[1]
                                litre_fiyatı = i[1]
                                süt = i[2] 
                                besi_yemi_miktarı = i[3] 
                                besi_yemi_fiyatı  = i[4]
                                süt_yemi          =  i[5] 
                                süt_yemi_fiyatı   = i[6] 
                                küsbe             = i[7] 
                                küsbe_fiyatı      = i[8]
                                son = i[2] * i[1]
                                toplam_yem = i[3]+i[5]+i[7] 
                                süt_tutar= i[5]* i[6]
                                besi_tutar=i[3]*i[4]
                                küsbe_tutar=i[7]*i[8]
                                toplam_yem_borcu = süt_tutar + besi_tutar + küsbe_tutar
                                brüt_kazançi = son - (süt_tutar + besi_tutar + küsbe_tutar)
                    
                                if brüt_kazançi > 0:
                                    sonuçi="alacağınız bulunmaktadır"
                                elif brüt_kazançi == 0:
                                    sonuçi="alacağınız bulunmamaktadır"
                                else:
                                    sonuçi="borcunuz bulunmaktadır"
                                etiket["text"] = metin1.format(yıl, ay, süt, son, ay, süt_yemi,
                                                           besi_yemi_miktarı, küsbe, toplam_yem,
                                                           süt_yemi_fiyatı, süt_tutar, besi_yemi_fiyatı,
                                                           besi_tutar, küsbe_fiyatı, küsbe_tutar,
                                                           toplam_yem_borcu, round(abs(brüt_kazançi)),
                                                           sonuçi)

                                etiket.grid(row=0, column=2)
                    
                def bi_hak():
                    #burası hakkında bölümümüz. kaydettiğimiz veriler
                    #hakkında bilgileri 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.geometry("300x100")
                        hakkında.wm_attributes("-topmost", 1)
                        hakkında.resizable(False, False)
                        hakkında.wm_protocol("WM_DELETE_WINDOW", sorb)
                        seçilen = tv.selection()
                        silinen = tv.item(item=seçilen)["values"]
                        h_et = Label(hakkında, justify="left", wraplength=300)
                        h_et.grid(row=0, column=2)
                        if seçilen :
                            for i in c:
                                if i[0] == silinen[0]:
                                    aysi  = i[0]
                                    tam_tarih = aysi.split("/")
                                    ay = tam_tarih[0]
                                    yıl = tam_tarih[1]
                                    vakit_n = i[9]
                                    h_et["text"] = """
    Dosya adı \t: süt&yem kartı {} {}\n
    kayıt tarihi\t: {} """.format(ay, yıl, vakit_n)
                            
                    else:
                        pass                      
                        
                def sil():
                    seçilen = tv.selection()
                    silinen = tv.item(item=seçilen)["values"]
                    if seçilen :
                        for i in c:
                            if i[0] == silinen[0]:
                                aysi  = i[0]
                                tam_tarih = aysi.split("/")
                                ay = tam_tarih[0]
                                yıl = tam_tarih[1]
                                sor = askyesno("DİKKAT!", "{} yılı {} ayı ile ilgili kaydı silmek istediğinize emin misiniz?".format(yıl, ay))
                                if sor:
                                    im.execute("""DELETE FROM personel WHERE ay = ? """, (i[0],) )
                                    vt.commit()
                                    tv.delete(seçilen)
                                    showinfo("Tamamlandı" , "{} yılı {} ayına ait kayıt silindi.".format(yıl, ay))

                tv.bind("", gösterici)
                tv.bind("", sağtık)
                tv.grid(row=0, column=0, sticky='ns')

                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)
yeni= Menu(dosya,tearoff=0)

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)

dosya4= Menu(menu, tearoff=0)
menu.add_cascade(label="Sonuç",menu=dosya4)
dosya4.add_command(label="Sonuç", command=hakkında1)

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.6")
pencere.geometry("670x430")
pencere.resizable(False, False)
pencere.wm_protocol("WM_DELETE_WINDOW", sor)
pencere.mainloop()