8 Haziran 2015 Pazartesi

Pardus'a Python IDLE kurulumu

IDLE
Merhaba arkadaşlar
kısa bir süre önce windows 7 işletim sistemini terkedip bilgisayarıma yerli işletim sistemimiz olan
pardus'u kurdum. Windows'tan pardus'a geçince ilk zorlandığım şey metin düzenleyici oldu. Daha önce projelerimde python ile gelen idle'yi kullandığım için diğer metin düzenleyiciler bana fazlasıyla yabacı geldi. Mesela F5 le run yapamıyordum mecburi olarak konsoldan komut vermek gerekiyordu. Bu da benim gibi windows'ta hazıra alışmış biri için fazlasıyla ağır geldi. Neyse biraz araştırdıktan sonra aslında windows'taki ideyi pardus'a da kurmanın mümkün olduğunu öğrendim. Aslına bakarsanız GNU/Linux dağılımlarının çoğunda bunu yapmak mümkünmüş. Bildiğiniz üzere pardusda bir GNU/Linux dağılımı. Vel hasılı kelam uçbirimden (konsoldan)
sudo apt-get install idle 
komutunu verdiğinizde ilk önce sizden doğrulama için şifrenizi isteyip
[sudo] password for falanca: 
ardından
Devam etmek istiyor musunuz? [E/h] 
diye size soracak buna da e yazıp Enter tuşuna bastığınızda sisteminizde ön tanımlı olan -ki
python 2x ön tanımlıdır- python sürümünün idle kurulacaktır.Eğer siz python 3x in idesini kurmak isterseniz bu komutu şu şekilde değiştirirseniz
sudo apt-get install idle3 
kurulum gerçekleşecektir. Artık gönül rahatlığıyla Windows'ta ki gibi python'un ıdle'nı kullanabilir istediğiniz gibi F5 yapabilirsiniz.

25 Şubat 2015 Çarşamba

virgüllü sayı tanıma

def virgül_tanıma(sayı):
    """
    >>> virgül_tanıma(1)
    1
    >>> virgül_tanıma(1.0)
    1
    >>> virgül_tanıma(1.1)
    1.1
    >>> virgül_tanıma(1.123456789)
    1.12
    >>> type(virgül_tanıma(1.123456789))
    
    >>> virgül_tanıma(1.02)
    1.02
    >>> virgül_tanıma(1.00)
    1
    """
    try:
        tanı = str(sayı).split(".")#sayımızı karakter dizisine
        # dönüştürüp split vasıtasıyla noktadan bölüyoruz.
        # bildiğiniz üzere split sadece karakter dizileri üzerinde
        #işlem yapabiliyor. sonrada tanı adlı değişkene atıyoruz.
        #tanı adlı değiken iki elemalı (ki ikiside karakter dizisi)
        #bir liste döndürüyor.
        
        if tanı[1] == "0": #tanının virgülden sonraki kısmının sıfır
            #olup olmadığına bakıyoruz . eğer sıfır'sa (0) virgülsüz
            # bir sayı döndürüyoruz.  tanı adlı değişkenimiz
            #bir karakter dizisi (str) olduğu için sıfır'ı ("0") da karakter
            #dizisine dönüştürüyoruz. 
            return round(sayı)

        else: # sayımızın virgülden sonrası sıfır değilse işler
            return round(sayı, 2) #sayının fazlalık kısmını
            #bu şekilde kırpmış oluruz. fazla virgüllü sayılar
            #özellikle son kullanıcı için pek te iştah kabartıcı
            #bulunmayabilir. ayrıca para birimlerinde de (kuruş, 
            #cent gibi) genelde (virgülden sonra ki kısım kırık
            #(demirlikler) para birimlerini temsil eder) iki birimden
            #        oluşur ben süt
            # hesaplayıcı için tasarladığım için virgülden sonra
            #iki birimin gösterilmesini tercih ettim tabi bu sizin
            #tercihinize kalmış.

    except IndexError: #eğer sayımız kayan noktalı bir
        #sayı değilde bir tam sayı ise modülümüzün çökmesini
        #önleyip aynı sayıyı döndürüyoruz.
        return sayı

14 Ocak 2015 Çarşamba

süt hesaplayıcı

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

############################
# programlayan      s@lim_yıldırım 
# proje ismi             süt hesaplayıcı
# version                 0.0.1
# time                      2013
############################

from tkinter import *
import tkinter as tk
import tkinter.ttk as ttk
from tkinter.messagebox import*
from datetime import date
from calendar import monthrange
import tkinter.scrolledtext as scrolledtext
import datetime, sqlite3, time, locale

class SütHesaplayıcı(tk.Tk):
    def __init__(self):
        tk.Tk.__init__(self)
        self.veri_tabanı()
        self.tarih_işlemleri()
        self.ana_pen_araçları()
        self.süt_kartı= []
        self.yem_kartı = []
        self.kayıt_denetim = 0
        self.düzen_denetim = 0
        self.takip_pen_kntrl = 0
        
    def ana_pen_araçları(self, event=None): 
        self.çerçeve = {}
        for f in range(2):
            self.çerçeve["f%s"%f] = Frame()
            self.çerçeve["f%s"%f].grid(row=f, column=1)

        r = [2, 2, 3]
        c = [1, 2, 1]
        self.btn = {}
        self.btn_kmt = [self.hesapla, self.kayıt, self.takip_pen_araçları]
        self.fnk_lst = [self.d1, self.d2, self.d3]
        self.btn_mtn = ["Hesapla", "Kaydet", "Takip Kartı"]
        for self.b in range(len(self.btn_mtn)):
            self.btn["b%s"%self.b] = tk.Button(self.çerçeve["f1"],
                                     text      = self.btn_mtn[self.b],
                                     relief    = "groove",
                                     font      = "Helvetica 11 bold",
                                     bg        = "#4A4A4A",
                                     fg        = "#00b6ff",
                                     width     = 11,
                                     height=3,
                                     command = self.btn_kmt[self.b])
            self.btn["b%s"%self.b].grid(row=r[self.b], column=c[self.b], pady=1, padx=1)
            self.btn["b%s"%self.b].bind("", self.fnk_lst[self.b])
            self.btn["b%s"%self.b].bind("", self.ters_anm)

        cer1 = ttk.Labelframe(self.çerçeve["f1"], text="Süt Kartı", width=100, height=100)
        cer1.grid(row=0, column=0, rowspan=8)

        cer2 = ttk.Labelframe(self.çerçeve["f1"], text="Tarih İşlemleri", width=100, height=100)
        cer2.grid(row=0, column=1, columnspan=2)

        cer3 = ttk.Labelframe(self.çerçeve["f1"], text="Yem kartı", width=100, height=100)
        cer3.grid(row=1, column=1, columnspan=2)

        cer4 = ttk.Labelframe(self.çerçeve["f0"], text="Sonuç", width=100, height=100)
        cer4.grid(row=0, column=1)

        self.süt_ilk_ent = {}
        for g1 in range(16):
            ttk.Label(cer1, text="%s.Gün"%(g1+1)).grid(row=g1, column=0)
            self.süt_ilk_ent["a%s"%g1] = ttk.Entry(cer1, width=15)
            self.süt_ilk_ent["a%s"%g1].grid(row=g1, column=1)
            self.süt_ilk_ent["a%s"%g1].bind("", self.hesapla)

        self.süt_ikinci_ent = {}
        for g2 in range(15):
            ttk.Label(cer1, text="%s.Gün"%(g2 + 17)).grid(row=g2, column=2)
            self.süt_ikinci_ent["a%s"%g2] = ttk.Entry(cer1, width=15)
            self.süt_ikinci_ent["a%s"%g2].grid(row=g2, column=3)
            self.süt_ikinci_ent["a%s"%g2].bind("", self.hesapla)
            
        self.comb = {}
        cmb_set_lst = [self.ay, self.yıl]
        cmb_vls_lst = [list(self.ay_listesi.values()), [self.yıl -i for i in range(20)]]
        for c in range(2):
            self.comb["a%s"%c] = ttk.Combobox(cer2, width=14,
                                         values = cmb_vls_lst[c])
            self.comb["a%s"%c].grid(row=0, column=c, sticky="w", pady=4)
            self.comb["a%s"%c].bind("", self.hesapla)
            self.comb["a%s"%c].set(cmb_set_lst[c])

        self.ent_mtn = ["Litre Fiyatı", "Süt Yemi Fiyatı", "Süt Yemi Miktarı",
                       "Besi Yemi Fiyatı", "Besi Yemi Miktarı", "Küsbe Fiyatı", "Küsbe Miktarı"]
        self.ym_krt_ent = {}
        for y in range(7):
            ttk.Label(cer3, text=self.ent_mtn[y]).grid(row=y, column=0, sticky="w")
            self.ym_krt_ent["a%s"%y] = ttk.Entry(cer3)
            self.ym_krt_ent["a%s"%y].grid(row=y, column=1)
            self.ym_krt_ent["a%s"%y].bind("", self.hesapla)

        self.sonuç = scrolledtext.ScrolledText(cer4, width=60, height=5)
        self.sonuç.grid(row=0, column=0, pady=1, padx=2)
        self.reklam_mtn = "Süt Hesaplayıcı Bir S@lim yıldırım Ürünüdür"
        self.sonuç.insert(END, self.reklam_mtn.center(60, "-"))

    def d1(self, event=None):
        self.btn["b0"]["fg"] = "#FFF"

    def d2(self, event=None):
        self.btn["b1"]["fg"] = "#FFF"

    def d3(self, event=None):
        self.btn["b2"]["fg"] = "#FFF"

    def ters_anm(self, event=None):
        for b in range(3):
            self.btn["b%s"%b]["fg"] = "#00b6ff"

    def hesapla(self, event=None):
        self.süt_kartı= []
        self.yem_kartı = []
        self.sonuç.delete(0.0, "end")
        if not self.comb["a0"].get():
            showerror("Hata!", "Bulunduğunuz ay'ı belirtmediniz!",
                  detail="Lütfen herhangi bir ay adı giriniz!")
            self.sonuç.insert(END, self.reklam_mtn.center(60, "-"))
            return "break"
    
        else:
            if not self.comb["a1"].get():
                showerror("Hata!", "Bulunduğunuz yılı belirtmediniz!",
                      detail="Lütfen herhangi bir yıl adı giriniz!")
                self.sonuç.insert(END, self.reklam_mtn.center(60, "-"))
                return "break"
            else:
                try:
                    for h1 in range(16):
                        self.süt_kartı.append(int and float(self.süt_ilk_ent["a%s"%h1].get()))
                    for h2 in range(15):
                        self.süt_kartı.append(int and float(self.süt_ikinci_ent["a%s"%h2].get()))
                    for y in range(7):
                        self.yem_kartı.append(int and float(self.ym_krt_ent["a%s"%y].get()))

                    süt_tutarı = sum(self.süt_kartı)*(self.yem_kartı[0]) 
                    yem_borcu = ((self.yem_kartı[1] * self.yem_kartı[2]) +
                                     (self.yem_kartı[3] * self.yem_kartı[4]) +
                                     (self.yem_kartı[5] * self.yem_kartı[6]))
                    brüt_gelir = süt_tutarı - yem_borcu

                    if brüt_gelir > 0:
                        m_tin="Alacak {} tl".format(brüt_gelir)
                    elif brüt_gelir == 0:
                        m_tin = "Başabaş"
                    else:
                        m_tin = "Borç {} tl".format(abs(brüt_gelir))
                    
                    snç_mtn = "Süt Tutarı {} tl\nYem Borcu {} tl\n{}".format(süt_tutarı,
                                                                             yem_borcu, m_tin)
                    self.sonuç.insert(END, self.reklam_mtn.center(60, "-"))
                    self.sonuç.insert(END, snç_mtn)
    
                    self.ay_nmr = int and float(list(self.ay_listesi.values()
                                                     ).index(self.comb["a0"].get())+1)
                    self.sıra_nmr = int and float("{}{}".format(self.comb["a1"].get(),
                                                              (self.ay_nmr/2)))
                except ValueError:
                    showerror("Hata!", "Lütfen sadece sayı girin!")
                    self.sonuç.insert(END, self.reklam_mtn.center(60, "-"))

    def takip_pen_araçları(self):
        if not self.takip_pen_kntrl:
            def takip_pen_sorgu():
                self.takip_pen_kntrl = 0
                gösterge_paneli.destroy()

            try:
                self.veritabanı.commit()
                self.imge.execute("""SELECT * FROM süt""")
                self.c = self.imge.fetchall()
            
                gösterge_paneli = Toplevel()
                gösterge_paneli.title("Süt&Yem Takip Kartı")
                gösterge_paneli.resizable(False, False)
                gösterge_paneli.wm_protocol("WM_DELETE_WINDOW", takip_pen_sorgu)
                self.takip_pen_kntrl = 1
                self.gösterge_far = {}
                for f in range(4):
                    self.gösterge_far["a%s"%f]= Frame(gösterge_paneli)
                    self.gösterge_far["a%s"%f].grid(row=0, column=f, padx=2, pady=2)

                self.cevap_l = {}
                self.başlık_l = {}
                başlık_listesi = ["Ay & Yıl", "Toplam Dökülen Süt", "Litre fiyatı",
                    "Süt Yemi Fiyatı", "Süt Yemi Miktarı", "Besi Yemi Fiyatı",
                    "Besi Yemi Miktarı", "Küsbe Fiyatı", "Küsbe Miktarı", 
                    "Toplam Yem Borcu", "Bürüt Kazanç/Borç",
                              "Kayıt Tarihi", "Değiştirilme Tarihi"]
                for i in range(13):    
                    self.başlık_l["a%s"%i] = Label(self.gösterge_far["a1"],
                                                text = başlık_listesi [i],anchor="w",
                                               fg="white", bg="orange", width=15)
                    self.başlık_l["a%s"%i].grid(row=i, column=0, sticky="news", pady=1, padx=1)
                    self.cevap_l["a%s"%i] = Label(self.gösterge_far["a1"], width=25, bg="light green",
                                              anchor="w")
                    self.cevap_l["a%s"%i].grid(row=i, column=1, sticky="news", pady=1, padx=1)

                self.sütunlar = ["Ay" , "Yıl",]
                self.sçnk_kts = ttk.Treeview(self.gösterge_far["a0"], columns=self.sütunlar,
                                  show="headings", height=15)
        
                scb = ttk.Scrollbar(self.gösterge_far["a0"],
                                orient=VERTICAL)
                scb.grid(column=1, row=0, sticky="news")
                self.sçnk_kts['yscrollcommand'] = scb.set
                for sütun in range(2):
                    self.sçnk_kts.heading(self.sütunlar[sütun], text=self.sütunlar[sütun])
                    self.sçnk_kts.column(self.sütunlar[sütun], width = 100, anchor = 'center')

                for değer in sorted(self.c): 
                    self.sçnk_kts.insert("", "end", values=(değer[1], değer[2]))
                self.sçnk_kts.bind("", self.takip)
                self.sçnk_kts.bind("", self.sağtık)
                self.sçnk_kts.grid(row=0, column=0, sticky='news')
            except sqlite3.OperationalError:
                showwarning("Uyarı!" , "Kayıtlı herhangi bir veri yok!",
                            detail = "Lütfen önce herhangi bir yılın herhangi bir ayına ait kayıt giriniz!")

    def düzenle(self):
        self.seçilen = self.sçnk_kts.selection()
        self.silinen = self.sçnk_kts.item(item=self.seçilen)["values"]
        if self.seçilen :
            for i in self.c:
                if i[1] == self.silinen[0] and i[2] == str(self.silinen[1]):
                    süt_kartı_ilk = eval(i[3])[0:16]
                    süt_kartı_iki = eval(i[3])[16:31]
                    yem_kartı = eval(i[4])
                    for trh in range(2):
                        self.comb["a%s"%trh].set(i[trh+1])
                    for g1 in range(16):
                        self.süt_ilk_ent["a%s"%g1].delete(0, "end")
                        self.süt_ilk_ent["a%s"%g1].insert(0, round(süt_kartı_ilk[g1]))
                    for g2 in range(15):
                        self.süt_ikinci_ent["a%s"%g2].delete(0, "end")
                        self.süt_ikinci_ent["a%s"%g2].insert(0, süt_kartı_iki[g2])
                    for y in range(7):
                        self.ym_krt_ent["a%s"%y].delete(0, "end")
                        self.ym_krt_ent["a%s"%y].insert(0, yem_kartı[y])
                    self.düzen_denetim = 1
                    
    def sil(self):
        self.seçilen = self.sçnk_kts.selection()
        self.silinen = self.sçnk_kts.item(item=self.seçilen)["values"]
        if self.seçilen :
            for i in self.c:
                if i[1] == self.silinen[0] and i[2] == str(self.silinen[1]):
                    sor = askyesno("DİKKAT!", "%s yılı\
%s ayı ile ilgili kaydı silmek istediğinize emin misiniz?"%(i[2], i[1]))            
                    if sor:
                        self.imge.execute("""DELETE FROM süt WHERE sıra = ? """, (i[0],) )
                        self.veritabanı.commit()
                        self.sçnk_kts.delete(self.seçilen)
                        showinfo("Tamamlandı" , "%s yılının %s ayına ait kayıt silindi."%(i[2], i[1]))

    def sağtık(self, event):
        self.anamenu = Menu(tearoff=0)
        mn_k_listesi = [self.düzenle, self.sil, self.takip]
        mn_i_listesi =["Düzenle", "Sil", "Sonuç"] 
        for m in range(3):
            self.anamenu.add_command(label=mn_i_listesi[m],
                                     command=mn_k_listesi[m])

        satır = self.sçnk_kts.identify_row(event.y)
        if satır:
            self.sçnk_kts.selection_set(satır)
            self.anamenu.tk_popup(event.x_root, event.y_root)         
    
    def takip(self, event=None):
        self.seçilen = self.sçnk_kts.selection()
        self.silinen = self.sçnk_kts.item(item=self.seçilen)["values"]
        if self.seçilen :
            for i in self.c:
                if i[1] == self.silinen[0] and i[2] == str(self.silinen[1]):
                    süt_kartı = eval(i[3])
                    yem_kartı = eval(i[4])
                    yem_borcu = ((yem_kartı[1]*yem_kartı[2])+
                                 (yem_kartı[3]*yem_kartı[4])+
                                 (yem_kartı[5]*yem_kartı[6]))
                    bürüt_kznç = ((sum(süt_kartı)*yem_kartı[0])) - yem_borcu
                    takip_listesi = ["%s %s"%(i[1], i[2]), sum(süt_kartı), yem_kartı[0],
                                     yem_kartı[1], round(yem_kartı[2]), yem_kartı[3],
                                     round(yem_kartı[4]), yem_kartı[5], round(yem_kartı[6]),
                                     yem_borcu, round(abs(bürüt_kznç)), i[5], i[6]]
                
                    for i in range(13):
                        self.cevap_l["a%s"%i]["text"] = takip_listesi[i]
                    if bürüt_kznç > 0:
                        self.başlık_l["a10"]["text"] = "Kazanç\t\t\t:"
                        self.başlık_l["a10"]["bg"]="blue"
                        self.cevap_l["a10"]["bg"]="blue"
                    elif bürüt_kznç == 0:
                        self.başlık_l["a10"]["text"] = "alacağınız yok"
                        self.başlık_l["a10"]["bg"]="firebrick"
                        self.cevap_l["a10"]["bg"]="firebrick"
                    else:
                        self.başlık_l["a10"]["text"] = "Borç\t\t\t:"
                        self.başlık_l["a10"]["bg"]="red"
                        self.cevap_l["a10"]["bg"]="red"

    def veri_tabanı(self):
        try:
            self.veritabanı = sqlite3.connect("süt_hesaplayıcı.db")
            self.imge = self.veritabanı.cursor()
        except sqlite3.OperationalError:
            pass
        
    def kayıt(self):
        if self.süt_kartı == [] or  not self.comb["a0"].get()  and not self.comb["a1"].get():
            cevap = showwarning("Uyarı!" , "Lütfen Süt ve Yem Kartı'nı\
 doldurduğunuzdan emin olunuz!")
    
        elif len(self.comb["a1"].get()) < 4 or len(self.süt_kartı)<31 or len(self.yem_kartı)<7:
            showwarning("Uyarı!" , "Lütfen Süt ve Yem Kartı'nı\
 doldurduğunuzdan emin olunuz!")
        else:
            kayıt_tarihi = "{} {} {} {}. {}".format(time.strftime("%d"),
                                                    self.ay_listesi[self.bugün.month],
                                                    self.bugün.year,
                                                    self.gün[self.bugün.weekday()],
                                                    time.strftime("%X"))
            değiştirme_tarihi = "---"
            self.imge.execute("""CREATE TABLE if not exists süt
(sıra unique,ay, yıl, süt_listesi, yem_listesi, kayıt_tarihi, değiştirme_trh)""")
            if self.düzen_denetim == 0: 
                try:
                    self.imge.execute("""INSERT INTO süt VALUES (
                       ?, ?, ?, ?, ?, ?, ?)""",
                       (self.sıra_nmr,  self.comb["a0"].get(), self.comb["a1"].get(),
                        str(self.süt_kartı), str(self.yem_kartı), kayıt_tarihi, değiştirme_tarihi))
                    showinfo("Tamamlandı" , "%s yılı %s ayı ile ilgili veri başarıyla kaydedildi!"
                     %(self.comb["a1"].get(), self.comb["a0"].get()))

                    for g1 in range(16):
                        self.süt_ilk_ent["a%s"%g1].delete(0, "end")
                    for g2 in range(15):
                        self.süt_ikinci_ent["a%s"%g2].delete(0, "end")
                    for y in range(7):
                        self.ym_krt_ent["a%s"%y].delete(0, "end")
                    cmb_set_lst = [self.ay, self.yıl]
                    for c in range(2):
                        self.comb["a%s"%c].set(cmb_set_lst[c])
                    self.sonuç.delete(0.0, "end")
                    self.sonuç.insert(END, self.reklam_mtn.center(60, "-"))
                
                except sqlite3.IntegrityError:
                    soruni=showwarning("Uyarı!" , " %s yılının %s ayı ile ilgili kayıt zaten var!"
                               %(self.comb["a1"].get(), self.comb["a0"].get()),
                            detail = "Var olan kayıt üzerine kayıt yapamazsınız!",
                            type=RETRYCANCEL)
            if self.düzen_denetim == 1:
                devam = askyesno("Değiştirilecek", " %s yılının %s ayı ile ilgili kayıt değiştirilecek!"
                                 %(self.comb["a1"].get(), self.comb["a0"].get()),
                                 detail = "devam edilsin mi?",
                            type=YESNO)
                if devam:
                    self.imge.execute("""UPDATE süt SET ay = ?, yıl= ?, süt_listesi= ?,
yem_listesi= ?, değiştirme_trh = ? WHERE sıra = ? """,
                              (self.comb["a0"].get(), self.comb["a1"].get(),
                        str(self.süt_kartı), str(self.yem_kartı), kayıt_tarihi, self.sıra_nmr))
                    self.veritabanı.commit()
                    for g1 in range(16):
                        self.süt_ilk_ent["a%s"%g1].delete(0, "end")
                    for g2 in range(15):
                        self.süt_ikinci_ent["a%s"%g2].delete(0, "end")
                    for y in range(7):
                        self.ym_krt_ent["a%s"%y].delete(0, "end")
                    cmb_set_lst = [self.ay, self.yıl]
                    for c in range(2):
                        self.comb["a%s"%c].set(cmb_set_lst[c])
                    self.sonuç.delete(0.0, "end")
                    self.sonuç.insert(END, self.reklam_mtn.center(60, "-"))
                    showinfo("Başarılı" , "%s yılı %s ayı ile ilgili veri başarıyla değiştirildi!"
                     %(self.comb["a1"].get(), self.comb["a0"].get()))
                    self.düzen_denetim = 0
                    
    def tarih_işlemleri(self):
        locale.setlocale(locale.LC_ALL, 'turkish')
        self.bugün = datetime.date.today()
        self.yıl = self.bugün.year
        self.ay = datetime.datetime.strftime(self.bugün, '%B')

        self.ay_listesi = {1: "Ocak", 2: "Şubat", 3: "Mart",
                           4: "Nisan", 5: "Mayıs", 6: "Haziran",
                           7: "Temmuz", 8: "Ağustos", 9: "Eylül",
                           10: "Ekim", 11: "Kasım", 12: "Aralık"}

        self.gün ={0: "Pazartesi", 1: "Salı", 2: "Çarşamba",
                        3: "Perşembe", 4: "Cuma", 5: "Cumartesi",
                        6: "Pazar"}
    
if __name__ == '__main__':
    süt = SütHesaplayıcı()
    süt.title("Süt Hesaplayıcı")
    süt.resizable(False, False)
    süt.mainloop()

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