18 Kasım 2014 Salı

Separator

Resim 1: Separator
Separator tkinter grafik arayüzün’de bir pencere içerisinde gösterilecek olan birden fazla pencere aracını bir birinden yatay veya dikey olarak ayırmak için kullanılan bir pencere aracıdır. Bu araçta diğer pencere araçları gibi belli parametreler alır. ttk.Separator fonksiyonu iki parametre alır bunlarda birincisi konumlandırılacağı yer pencere, Toplevel, frame vb. eğer konumlandırılacağı yeri belirtmezseniz pencere üzerine konumlanır. İkinci parametre ise "orient"dir. bu parametre iki değer alır bunlardan ilki "HORIZONTAL" ("yatay") ikincisi ise "VERTICAL" ("dikey"). "orient" parametresinin ön tanımlı değeri "HORIZONTAL" dır . Bu yüzden orient isimli parametresi kullanılmazsa ayırıcımız(Separator) yatay olarak oluşacaktır. Tek başına kullanıldığında pencerede neredeyse görünmezdir. Ama frame , label, entry, Checkbutton vb. araçlarla kullanılırsa aracın boyutu kadar yatay veya dikey olarak oluşur.
Ayırıcı ttk.Separator fonksiyonu kullanılarak oluşturulur:

s = ttk.Separator()

Basit bir şekilde aşağıdaki gibi pencere içerisinde kullanılabilir.

#! python3
# -*- coding: utf-8 -*-
from tkinter import *
import tkinter.ttk as ttk
pencere = Tk()
s = ttk.Separator()
s.grid()
pencere.mainloop()

Gördüğünüz gibi bu kodlar hata vermeden çalışmasına rağmen ayırıcımız nerdeyse belli belirsiz bir nokta gibidir. Belki de çoğumuz bu noktayı görememiş olabilir. Daha öncede dediğimiz gibi bu pencere aracı tek başına kullanılmak için oluşturulmamıştır. Aşağıdaki kodlarda yukardaki kodlardan pekte farklı değildir.

#! python3
# -*- coding: utf-8 -*-
from tkinter import *
import tkinter.ttk as ttk
pencere = Tk()
s = ttk.Separator(pencere, orient=HORIZONTAL)
s.grid(row=0, column=0, sticky="news",  pady=5, padx=5)
pencere.mainloop()

Panedwindow

Panedwindow iki veya daha fazla pencere aracını üst üste veya alt alta (veya sol ve sağ) yerleşimini sağlar . Her bölmesine göre yükseklikleri veya genişlikleri ayarlanabilir.

panedwindow ttk.Panedwindow fonksiyonu kullanılarak oluşturulur:

Aşağıdaki kodlar basit bir panedwindow örneğidir.


from tkinter import *
import tkinter.ttk as ttk
pencere = Tk()

p = ttk.Panedwindow(pencere, orient=VERTICAL)

f1 = ttk.Labelframe(p, text="birinci çerçeve", width=100, height=100)
f2 = ttk.Labelframe(p, text="ikinci çerçeve" , width=100, height=100)

p.grid(row=0, column=0, sticky="news",  pady=5, padx=5)
p.add(f1)
p.add(f2)

pencere.title("Labelframe ve Panedwindow kullanımı")
pencere.mainloop()

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

24 Haziran 2014 Salı

Yem Analizcisi

Hiçbir şey kapitalist bir dünyada yaşadığımız gerçeğini değiştirmez. Birey olarak ya da işletme olarak hepimiz para gerçeğiyle er ya da geç yüzleşiriz. Ayakta kalmak için çaba sarf eder kendimizce yöntemler geliştiririz.  Tarım sektöründe de olaylar bundan pekte farklı değildir. Birkaç hayvanınız ya da birkaç dekar araziniz varsa siz de ayakta kalmak için çabalarsınız.

Birkaç inek için aldığınız yemlerin pahalı ya da ucuz olması pek sorun olmayabilir. Fazla da ince eleyip sık dokumazsınız.  Çünkü en ucuzunu almanız sizin için en ideal kriterdir. Fakat işler orta ve büyük ölçekli besihanelere geldiğinde bu kadarda basit olmayabilir. Daha çok süt dökmek daha ucuza yem almak daha az eleman çalıştırmak gibi sorunlarınız yem alış-verişinde de belli kriterler oluşturmanızı gerektirir. Yüksek proteinli yemi en ucuza almak istersiniz. Aynı zamanda iddia edilen proteinin süt verimine etkilerini ölçmek pek tabi hakkınızdır. İki şirketin yem ve protein oranını kıyaslarken pekte zorlanmayabilirsiniz birkaç hesapla hangisini tercih etmeniz gerektiği ortaya çıkar. Ama işin içine birbirine yakın fiyatlar ve birbirinden farklı protein oranları girdiğinde açıkçası işleriniz zorlaşır. Tam da bu noktada uzun uzun hesap yapmaktan kurtaracak şirketiniz için en iyi fiyat protein oranın tespit etmenize yarayacak olan yem analizcisi gibi bir araca ihtiyacınız vardır.

Yem fiyatlarının hızlı bir yükseliş gösterdiği şu günlerde hayvancılık sektörünün karar mekanizması işlevini yerine getiren bu programa ihtiyacının olduğu kanaatindeyim. Özellikle girdi-çıktı ve maliyet dengelerinin şirketlerin yatırım politikalarında belirleyici etmen olması şirketlerin varlık sebebi olan kar maksimizasyonu dikkate alındığında yem analizcisi hiçte küçümsenecek bir program değildir. En azından gelecekteki versiyonları için temel teşkil ettiği inancındayım.

yem analizcisinin kodları

#! python3

# -*- coding: utf-8 -*-

from tkinter import *
from tkinter.messagebox import *
from TitleFrame import *
import wckToolTips
from PIL import ImageTk
pencere = Tk()

def analiz():
    e1=şirl1.get()
    e2=int and float(şirl2.get())
    e3=int and float(şirl3.get())
    e4=şirl4.get()
    e5=int and float(şirl5.get())
    e6=int and float(şirl6.get())

    birinci=e2 / e3
    ikinci=e5 / e6

    if birinci == ikinci:
        sonuç="{}\'den veya {}\'den alabilirsiniz.".format(e1, e4)
    elif birinci > ikinci:
        sonuç="{}\'den alabilirsiniz.".format(e4)
    elif birinci < ikinci:
        sonuç="{}\'den alabilirsiniz.".format(e1)
    s_met["text"]=sonuç
cerceve3 = Frame(pencere)
cerceve3.grid(row=1, column=0, pady=10, padx=10)

TitleFrame.w = TitleFrame(cerceve3, "1.şirket")
TitleFrame.w.grid(row=1, column=0, pady=5, padx=5)
şirket1 = TitleFrame.w.getinner()

TitleFrame.w = TitleFrame(cerceve3, "2.şirket")
TitleFrame.w.grid(row=1, column=1, pady=5, padx=5)
şirket2 = TitleFrame.w.getinner()

img = Label()
img.grid(row=0, column=0)

şir1=Label(şirket1, text="şirketin adı")
şir1.grid(row=0, column=0, sticky="w")
şirl1 = Entry(şirket1)
şirl1.grid(row=0, column=1, padx=10)

şir2=Label(şirket1, text="fiyat")
şir2.grid(row=1, column=0, sticky="w")
şirl2 = Entry(şirket1)
şirl2.grid(row=1, column=1, padx=10)

şir3=Label(şirket1, text="protein oranı")
şir3.grid(row=2, column=0, sticky="w")
şirl3 = Entry(şirket1)
şirl3.grid(row=2, column=1, padx=10)

şir4=Label(şirket2, text="şirketin adı")
şir4.grid(row=0, column=2, sticky="w")
şirl4 = Entry(şirket2)
şirl4.grid(row=0, column=3, padx=10)

şir5=Label(şirket2, text="fiyat")
şir5.grid(row=1, column=2, sticky="w")
şirl5 = Entry(şirket2)
şirl5.grid(row=1, column=3, padx=10)

şir6=Label(şirket2, text="protein oranı")
şir6.grid(row=2, column=2, sticky="w")
şirl6 = Entry(şirket2)
şirl6.grid(row=2, column=3, padx=10)

hesapla = Button(text="Analiz yap",
                  compound="left",
                  command=analiz,
                  relief="flat",
                  overrelief="groove")
hesapla.grid(row=3, column=0)

s_met=Label()
s_met["text"]="Yem analizcisi bir S@lim Yıldırım ürünüdür..."
s_met.grid(row=4, column=0, sticky="e")

pencere.resizable(False, False)
pencere.title("Yem analizcisi v 0.0.1")
pencere.mainloop()

2 Haziran 2014 Pazartesi

TitleFrame

TitleFrame'nin kodları

#! py -3
# -*- coding: cp1254 -*-

# Instant Python: TitleFrame (Fredrik Lundh, June 1997)
# Instant Python: TitleFrame (S@lim Yıldırım, mayıs 2014)

from tkinter import *

class TitleFrame(Frame):

   def  __init__(self, master, label):

        Frame.__init__(self, master)

        çerçeve = Frame(self, relief=GROOVE, bd=2)

        w = Label(self, text=label)
        h = w.winfo_reqheight() / 2

        w.place(x=h+h-2)

        self.inner = Frame(çerçeve)
        self.inner.pack(padx=h, pady=h)

        çerçeve.pack(padx=h, pady=h)

    def getinner(self):

        return self.inner


if __name__ == '__main__':
#demo isterseniz bundan altını kaydetmeyebilirsiniz.
    pencere = Tk()
    pencere.title("salim")

    w = TitleFrame(pencere, "salim")
    w.grid()

    çerçeve = w.getinner()

    Button(çerçeve, text="Hello").grid()
    Button(çerçeve, text="World").grid()
    Label(çerçeve, text="Elveda Zalim Dünya!").grid()

    w = TitleFrame(pencere, "YILDIRIM")
    w.grid()
    çerçeve = w.getinner()
    salim = TitleFrame(pencere, "YILDIRIM")
    salim.grid()
    pencere.mainloop()

yukarıdaki kodları "TitleFrame.py" adlı  dosyaya kaydedip
python 3.3.2 ( veya hangi sürüm yüklüyse yeter ki 3x olsun)  kurulu dosyanın içine atıyoruz. sonra cmd den
bulunduğumuz dizin altında py -3 komutunu veriyoruz. ardından da
from TitleFrame import * komutunu vererek TitleFrame
etiketli çerçeveleme aracımızı kullanılabilir hale getirmiş oluyoruz.








kullanabilmek için de kullanmak istediğimiz projede import ediyoruz.

#! python3
from tkinter import *
from TitleFrame import *

pencere = Tk()
pencere.title("salim")

TitleFrame.w = TitleFrame(pencere, "salim")
TitleFrame.w.grid()
çerçeve = TitleFrame.w.getinner()

Label(çerçeve, text="s@lim'in TitleFrame'si\
      py -3.3.2").grid()


pencere.mainloop()


TitleFrame üçüncü şahıs modülüdür 2x serisi için geliştirilmiştir.
ben sadece 3x serisinde kullanımını anlattın . üzerinde de bazı
değişiklikler yapım bu modülün orjinalini  buradan  bulabilirsiniz.

31 Mayıs 2014 Cumartesi

rsa modülüyle kriptolama

windows kullanıcısı iseniz Buradan sisteminize
uygun olan paketi indirip kurulumunu yapabilirsiniz. ayrıca rsa hakkında daha
detaylı bilgiye de buradan ulaşabilirsiniz.

öncelikle rsa modülümüzü kullanabilmek için import etmemiz şart.

>>>import rsa
>>>

eğer konsolda imleç bir alt satıra sorunsuzca geçmişse
rsa modülünü doğru kurmuşsunuz demektir.

Python 2.7.4 (default, Apr  6 2013, 19:54:46) [MSC v.1500 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> import rsa
>>> (sifrelemeAnahtari,sifreCozmeAnahtari) = rsa.newkeys(512)
>>> mesajimiz = 'rsa ile ilk krptolama deneyimi!'
>>> kriptoluMetin = rsa.encrypt(mesajimiz,sifrelemeAnahtari)
>>> CozulmusMetin = rsa.decrypt(kriptoluMetin,sifreCozmeAnahtari)
>>> print kriptoluMetin
’7q
£a³¢HÏ8{D k¶Ú†xbO†AÙŠ Õ¬S }D ô Èk”¼Ïf¬ ğp G\_"]ÑVõ$W©ÚùS·a’µ
>>> print CozulmusMetin
rsa ile ilk krptolama deneyimi!

gördüğünüz gibi rsa modülüyle konsolda basit bir krptolama yaptık.
encrypt ifadesi mesajımızı adındanda anlayacağımız üzere şifreleme
anahtarını kullanarak kriptolamaya yarıyor. newkeys ise şifreleme
anahtarımız.decrypt ifadesi de newkeys ile belirttiğimiz şifreleme
anahtarını kullanarak kriptolu metnimizi çözüyor.bu arada newkeys
ifadesinin içindeki sayı kriptolamayı yapacağımız bit değeridir.
bu sayıyı değiştirebiliriz elbet gelin isterseniz değiştirince neler
olacağına aynı örnek üzerinden bakalım.

Python 2.7.4 (default, Apr  6 2013, 19:54:46) [MSC v.1500 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> import rsa
>>> (sifrelemeAnahtari,sifreCozmeAnahtari) = rsa.newkeys(712)
>>> mesajimiz = 'rsa ile ilk krptolama deneyimi!'
>>> kriptoluMetin = rsa.encrypt(mesajimiz,sifrelemeAnahtari)
>>> CozulmusMetin = rsa.decrypt(kriptoluMetin,sifreCozmeAnahtari)
>>> print kriptoluMetin
.K ïᄇCöÞÅ ÔDOå{òᄊö@ナá_Þ3ᄀハ@ãᄊÒ  Óð゙ ᆵJ ̔~テ|  zᆭë  ᆬHúᄃ2ヤíä゙ÌÑO×v  =)B "H
>>> print CozulmusMetin
rsa ile ilk krptolama deneyimi!

gördüğünüz gibi her iki örnekte de aynı metni kullanmamıza rağmen
kriptolu metinlerimiz farklı.

27 Mayıs 2014 Salı

blog yayına başlarken

Bir yazılım diline ya da bilgisayara merak salmam ilk okul 4'te başladı. Bir bilgisayara sahip olmam 20 yılımı aldı. ilk programımı yazmam 6 haftama mal oldu . Belkide yazılımı bu yüzden seviyorumdur. yazılım bence insanın dünyayı tanımasında ve gündelik hayatın getirdiği problemlere sanal bir çözüm bulmasında mükemmel bir araçtır. şimdilik emekleme evresinde  olsamda birgün bu blog'dan harika kodlar paylaşacağım.