treeview search

saadron
Mesajlar: 58

treeview search

Mesaj#1 » 22 Şub 2012, 14:35

merhaba arkadaşlar aşağıdaki resimde görünen treeview yapısında yukardaki entry girişinden isim ile arama yaptırmak ve sonra entry yi boşaltıp tekrar ara butonuna basınca tekrar tüm verilerin ekrana gelmesini sağlamak istiyorum birkaç yöntem denedim farklı sorunlar ortaya çıktı bu konuda yardımcı olursanız çok sevinirim.
Dosya ekleri
pro.JPG
pro.JPG (50.4 KiB) 2203 kere görüntülendi

Kullanıcı avatarı
istihza
Site Yöneticisi
Mesajlar: 940

Re: treeview search

Mesaj#2 » 23 Şub 2012, 10:52

Şöyle bir örnek verebilirim:

Kod: Tümünü seç

# -*- coding: cp1254 -*-
from Tkinter import *
import ttk
from functools import partial

pencere = Tk()


sutunlar = ["ürün", "miktar"]

urunler = [(u"MADEN SUYU 20CL", 12),
          (u"ŞEKER 1 KG KÜP", 5),
          (u"SAHLEP FIERO 20GR", 10),
          (u"MEY. SODA 6X25CL", 4),
          (u"NESCAFE 18GR 3 İN 1", 8)]

tree = ttk.Treeview(columns=sutunlar, show="headings")
tree.pack(expand="yes", fill="both")

for sutun in sutunlar:
    tree.heading(sutun, text=sutun)

for urun in urunler:
    tree.insert("", "end", values=(urun))

def arama_yap(aranacak):
    tr = tree.get_children()

    for k in tr:
        if aranacak in tree.set(k)["ürün"]:
            print "evet var!"
        else:
            print "yok!"

frame = Frame()
frame.pack(padx=10, pady=10)

ara = ttk.Entry(frame)
ara.grid(row=0, column=0)
dgm = ttk.Button(frame, width=5, text="ara", command=lambda: arama_yap(ara.get()))
dgm.grid(row=0, column=1)

pencere.mainloop()


Ama arama işlemini yine veritabanında yapmayı da tercih edebilirsiniz. Ne de olsa treeview içeriğini veritabanından alıyorsunuz. Türkçe karakterler nedeniyle treeview içinde yapacağınız arama, aşması zor problemler çıkarabilir.

saadron
Mesajlar: 58

Re: treeview search

Mesaj#3 » 23 Şub 2012, 11:36

hocam teşekkür ederim hemen denemelere başlıyacağım verdiğiniz fikirlerle ama bişey öğrenmek istiyorum bu id noları temizleme şansım yokmu ya da silme ?

Kullanıcı avatarı
istihza
Site Yöneticisi
Mesajlar: 940

Re: treeview search

Mesaj#4 » 23 Şub 2012, 11:52

Bunlar programın kendi atadığı değerler. Bunları neden silmek istiyorsunuz?

saadron
Mesajlar: 58

Re: treeview search

Mesaj#5 » 23 Şub 2012, 12:44

Kod: Tümünü seç

trapfocus=box1.focus()    #seçtiğimiz satırın id yerini veriyor. mesela I003 gibi sonrada bunu kullanıyoruz.
    print "trapfocus", trapfocus
    trapitem=box1.item(trapfocus)['values'][0]
   
    print "trapitem" ,trapitem
    kpas=tree.get_children() #tüm treeview deki satirların id adresini çekiyor.
    print kpas
    for i in kpas:
        kpasitem=tree.item(i)['values'][0]  #tree.item sözlük olarak çekiyor veriyi komutun tamamı istedğimiz veriyi almamızı sağlıyor
#        adetsayisi=tree.item(i)['values'][2]
#        print "adetsayisi", adetsayisi
        if trapitem==kpasitem:
            adetsayisi=tree.item(i)['values'][2]
            sira2=tree.index(i)  #index komutu bellek adresine karşılık gelen satır numarasını veriyor.
            total=boxadet+adetsayisi
iade_button.config(command=partial(iade,sira2,total))


hocam box1 sağdaki küçük treeview tree de büyük olan malzemelerin göründüğü zaten 1 aydır falan bunla uğraşıyorum az çok bilrsiniz daha öncedende sizi sıkıştırmıştım şunu yapamıyorum bunu yapamıyorum diye hocam id yi item komutu ile kullandığımız zaman bana treeview deki o id nolu satırın tüm değerlerini bir sözlük içinde veriyor ben oradan isimi ayıklıyorum box1 deki isimi tree deki isimle karşılaştırıp tree deki sıra numarasını bulduruyorum nedeni ise iade butonuna basınca tree isimli treeview deki adet miktarı eski haline alsın diye tabi komutlara çok hakim değilim deneme yanılmayla yapıyroum belkide daha kolay bir yolu vardır. işte id yi kullanma sebebim bu id değişince ne oluyor derseniz mesela

Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python26\lib\lib-tk\Tkinter.py", line 1410, in __call__
return self.func(*args)
File "C:\Documents and Settings\asdasd\Desktop\zehirli sarmaşık\piton deneme klasörleri\oraclekantin denemeleri\barkodden.pyw", line 135, in yaz
tree.set(tree.get_children()[index], 'sutun3', kalan)
IndexError: tuple index out of range

bu hatayı veriyor yani kalan değerini adet sütunundaki yere yansıtamıyor aktar butonuna basınca öyle ki iade butonuna basınca da prog kitleniyor işte nedenim bu id leri silmek istemedeki, eminimki benim yazdığımdan kolay bi yöntem vardır çünki pythonu öğrendikce hadi ya bu böylemiymiş tüh şunu şöyle yapsaydım dediğim o kadar çok yer olduki fakat hocam 400 satıra yakın yazdım uykumda bile yazdım yattığım yerde düşündüm emek verdim sil baştanda yapamamki yazdığım bu program python hakkında çok şey öğretti bazen ya keşke class yapsaydım dedim hatta yaptım sonra geri döndüm öyle işte hocam :) vay canına baya dertliymişim dimi
saygılarımla hocam teşekkürler

saadron
Mesajlar: 58

Re: treeview search

Mesaj#6 » 23 Şub 2012, 12:58

hocam bu arama entry si olmasa program çalışıyor düzgün bi şekilde db update yapıyor ve hatta muhasebede çıkan malzemeler bir kasa ismi halinde görünüyor bu program bi kantin programı bu arada heralde anlamışsınızdır ama kuruma özel bir bir program olacak ve aramayıda hocam isimle değil barkod ile yapıyor ben arka alanda db den barkod ile arama yaptırıyorum focus_get ilede entry ye ilk aktifliği verdim yani progun hikayesi bu :)

saadron
Mesajlar: 58

Re: treeview search

Mesaj#7 » 23 Şub 2012, 13:22

hocam aşağıdaki resimde 1406 denemek için bir barkod numarası bez toz diye bir malzemeye öylesine verdiğim bir numara ara butonuna basınca tree kutusuna bir tek o geliyor ama id nosu değişmiş sebebi de ben

Kod: Tümünü seç

 tree.insert("","end",values=(L[0],kutu,adet,kutuf,adef))

bu kodla tree isimli treeview e yeni girdi yaptırıyorum işte herşey bu yüzden karışıyor eğerki treeviewin kendi bünyesi içinde bir arama kodu yazabilsem (varmı bilmiyorum bile) id ler değişmeycek bu progda çalışacak.
Dosya ekleri
barkara.JPG
barkara.JPG (30.44 KiB) 2181 kere görüntülendi

Kullanıcı avatarı
istihza
Site Yöneticisi
Mesajlar: 940

Re: treeview search

Mesaj#8 » 23 Şub 2012, 14:10

ID'ler değişken olduğu için işinize yaramaz. Ama benim verdiğim örnekteki gibi bir yol izlerseniz barkoda göre sorgulama da yapabilirsiniz.

Kod: Tümünü seç

# -*- coding: cp1254 -*-

from Tkinter import *
import ttk

pencere = Tk()


sutunlar = ["ürün", "miktar", "barkod"]

urunler = [(u"MADEN SUYU 20CL", 12, "423343242"),
          (u"ŞEKER 1 KG KÜP", 5, "53453453"),
          (u"SAHLEP FIERO 20GR", 10, "234234234"),
          (u"MEY. SODA 6X25CL", 4, "4534535"),
          (u"NESCAFE 18GR 3 İN 1", 8, "3423423423")]

tree = ttk.Treeview(columns=sutunlar, show="headings")
tree.pack(expand="yes", fill="both")

for sutun in sutunlar:
    tree.heading(sutun, text=sutun)

for urun in urunler:
    tree.insert("", "end", values=(urun))

def arama_yap(aranacak):
    tr = tree.get_children()

    for k in tr:
        if aranacak in tree.set(k)["barkod"]:
            print "evet var!"
        else:
            print "yok!"

frame = Frame()
frame.pack(padx=10, pady=10)

ara = ttk.Entry(frame)
ara.grid(row=0, column=0)
dgm = ttk.Button(frame, width=5, text="ara", command=lambda: arama_yap(ara.get()))
dgm.grid(row=0, column=1)

pencere.mainloop()

saadron
Mesajlar: 58

Re: treeview search

Mesaj#9 » 23 Şub 2012, 14:31

saolun hocam peki yaptığımız sorgulamayı treeview ekranında tek girdi olarak nasıl gösterebiliriz çünkü 100 lerce malzeme var diyelimki kullanıcı arasında seçmek zorunda liste aşağı kadar uzuyor bu arama ekrarnına girilen barkod numarasına ait malzemeyi yine aynı treeview ekranına getirmeyi nasıl yapabiliriz ?

Kullanıcı avatarı
istihza
Site Yöneticisi
Mesajlar: 940

Re: treeview search

Mesaj#10 » 23 Şub 2012, 15:41

Şöyle olabilir:

Kod: Tümünü seç

# -*- coding: cp1254 -*-

from Tkinter import *
import ttk

pencere = Tk()


sutunlar = ["ürün", "miktar", "barkod"]

urunler = [(u"MADEN SUYU 20CL", 12, "423343242"),
          (u"ŞEKER 1 KG KÜP", 5, "53453453"),
          (u"SAHLEP FIERO 20GR", 10, "234234234"),
          (u"MEY. SODA 6X25CL", 4, "4534535"),
          (u"NESCAFE 18GR 3 İN 1", 8, "3423423423")]

tree = ttk.Treeview(columns=sutunlar, show="headings")
tree.pack(expand="yes", fill="both")

for sutun in sutunlar:
    tree.heading(sutun, text=sutun)

for urun in urunler:
    tree.insert("", "end", values=(urun))

def arama_yap(aranacak):
    tr = tree.get_children()
    for k in tr:
        try:
            if aranacak == tree.set(k)["barkod"]:
                tree.insert("", "end", values=(tree.set(k, 0), tree.set(k, 1), tree.set(k, 2)))
                for i in tr:
                    tree.delete(i)
        except TclError:
            pass
       
frame = Frame()
frame.pack(padx=10, pady=10)

ara = ttk.Entry(frame)
ara.grid(row=0, column=0)
dgm = ttk.Button(frame, width=5, text="ara", command=lambda: arama_yap(ara.get()))
dgm.grid(row=0, column=1)

pencere.mainloop()

“Tkinter” sayfasına dön

Kimler çevrimiçi

Bu forumu görüntüleyen kullanıcılar: Hiç bir kayıtlı kullanıcı yok ve 1 misafir