Tkinter treeview de filtre (arama ) bölümü eklemek?

python
tkinter

#1

Arkadaşlar iyi günler pythonda yeniyim kendimi geliştirebilmek için basit bir muhasebe takip programı yapmaya çalışıyorum. Veri tabanımdan verileri gösteren bir treeview oluşturdum, arama kısmında bir kaç tane entry var bu entrylere göre filtreleme yapmak istiyorum ama beceremedim bir türlü.
Arama definasyonu;

def arama(self):
    print(self.Entry1.get(),self.Entry2.get())
    records = self.Scrolledtreeview1.get_children()
    for element in records:
        self.Scrolledtreeview1.delete(element)
    query= 'SELECT * FROM product WHERE tarih = ? and kilo=?'#(self.Entry1.get(),self.Entry2.get(),self.Entry3.get(),self.TCombobox1.get())
    parameters=(self.Entry1.get(),self.Entry2.get())
    db_rows=(query,parameters)
    for row in db_rows:
        self.Scrolledtreeview1.insert('', 2, text=row[1], values=(row[2], (row[3],'kg'), (row[4],'TL'),(row[5],'TL'),row[6],row[7],row[0]))

bu şekilde yapınca üç entryide girince çalışıyor ancak bir veya iki entry olmazsa çalışmıyor. Select kısmı için bir if oluşturmayı denedim ama onuda beceremedim, acaba yardımcı olabilecek bir var mı ?


#2

Kodlarınızı girintilemeye dikkat ederek paylaşabilir misiniz?


#3

Tabi kusura bakmayın. Düzelttim şimdi.


#4

Ben bu koddan hiçbir şey anlamadım. Bu kodlar çalışıyor mu? Bir kere SQL sorgusunda “tarih”, “kilo” ve “odeme” olarak üç parametre var ancak iki tane Entry aracından veri alıyorsunuz. Biraz açıklar mısınız kodlarınızı? Tam olarak neresinde sorun yaşıyorsunuz?


#5

Ödeme kısmını silmeyi unutmuşum, normalde o da olacak ama şimdilik sadece iki Entry yi deniyorum.
Girişte de anlatmaya çalıştım, bir daha anlatmaya çalışayım ‘product’ adında bir veri tabanım var (öğeleri : id,fisim,tarih,kilo,borc,odeme,odemet,not,`time). Bu veri tabanını bir treeview içerinde görüntülüyorum ve bu treeview için bir filtre kısmı oluşturmak istiyorum. Örneğin; 19.10.2018 tarihteki 10 kiloda olan satırları listelemek istiyorum, paylaşmış olduğum defination belirmiş olduğum örnekte işe yarıyor ancak mesela sadece 19.10.2018 tarihi için veya sadece 10 kilo için filtreleme yapmak istediğimde, iki entryden birini haliyle boş bırakmam gerektiğinden gelen get değeride boş olduğundan sonucuda boş veriyor. Yani veri tabanımda 19.10.2018 tarihinde ve değeri boş olan bir satır yok. Bu sıkıntımı çözebilecek bir formül arıyorum.

Umarım bu kez derdimi anlatabilmişimdir. :slight_smile:


#6

Eğer sadece bir alana göre arama yapmak istiyorsanız sorgunuzda sadece o alanı belirtin. Örneğin, sadece tarih alanı dolu olduğunda sorgunuz şöyle olmalı: 'SELECT * FROM product WHERE tarih = ?'