istihza.com

Python Programlama Dili
Zaman: 01 Eyl 2014, 16:33

Tüm zamanlar UTC + 2 saat [ GITZ ]




Yeni başlık gönder Başlığa cevap ver  [ 12 mesaj ]  Sayfaya git 1, 2  Sonraki
Yazar Mesaj
 Mesaj Başlığı: treeview search
MesajGönderilme zamanı: 22 Şub 2012, 14:35 
Çevrimdışı

Kayıt: 25 Haz 2011, 12:54
Mesajlar: 58
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.


Eklentiler:
pro.JPG
pro.JPG [ 50.4 KiB | 2054 kere görüntülendi ]
Başa Dön
 Profil  
 
 Mesaj Başlığı: Re: treeview search
MesajGönderilme zamanı: 23 Şub 2012, 10:52 
Çevrimdışı
Site Yöneticisi
Kullanıcı avatarı

Kayıt: 01 Nis 2011, 16:38
Mesajlar: 902
Şöyle bir örnek verebilirim:

Kod:
# -*- 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.


Başa Dön
 Profil  
 
 Mesaj Başlığı: Re: treeview search
MesajGönderilme zamanı: 23 Şub 2012, 11:36 
Çevrimdışı

Kayıt: 25 Haz 2011, 12:54
Mesajlar: 58
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 ?


Başa Dön
 Profil  
 
 Mesaj Başlığı: Re: treeview search
MesajGönderilme zamanı: 23 Şub 2012, 11:52 
Çevrimdışı
Site Yöneticisi
Kullanıcı avatarı

Kayıt: 01 Nis 2011, 16:38
Mesajlar: 902
Bunlar programın kendi atadığı değerler. Bunları neden silmek istiyorsunuz?


Başa Dön
 Profil  
 
 Mesaj Başlığı: Re: treeview search
MesajGönderilme zamanı: 23 Şub 2012, 12:44 
Çevrimdışı

Kayıt: 25 Haz 2011, 12:54
Mesajlar: 58
Kod:
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


Başa Dön
 Profil  
 
 Mesaj Başlığı: Re: treeview search
MesajGönderilme zamanı: 23 Şub 2012, 12:58 
Çevrimdışı

Kayıt: 25 Haz 2011, 12:54
Mesajlar: 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 :)


Başa Dön
 Profil  
 
 Mesaj Başlığı: Re: treeview search
MesajGönderilme zamanı: 23 Şub 2012, 13:22 
Çevrimdışı

Kayıt: 25 Haz 2011, 12:54
Mesajlar: 58
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:
 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.


Eklentiler:
barkara.JPG
barkara.JPG [ 30.44 KiB | 2032 kere görüntülendi ]
Başa Dön
 Profil  
 
 Mesaj Başlığı: Re: treeview search
MesajGönderilme zamanı: 23 Şub 2012, 14:10 
Çevrimdışı
Site Yöneticisi
Kullanıcı avatarı

Kayıt: 01 Nis 2011, 16:38
Mesajlar: 902
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:
# -*- 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()


Başa Dön
 Profil  
 
 Mesaj Başlığı: Re: treeview search
MesajGönderilme zamanı: 23 Şub 2012, 14:31 
Çevrimdışı

Kayıt: 25 Haz 2011, 12:54
Mesajlar: 58
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 ?


Başa Dön
 Profil  
 
 Mesaj Başlığı: Re: treeview search
MesajGönderilme zamanı: 23 Şub 2012, 15:41 
Çevrimdışı
Site Yöneticisi
Kullanıcı avatarı

Kayıt: 01 Nis 2011, 16:38
Mesajlar: 902
Şöyle olabilir:

Kod:
# -*- 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()


Başa Dön
 Profil  
 
Eskiden itibaren mesajları göster:  Sırala  
Yeni başlık gönder Başlığa cevap ver  [ 12 mesaj ]  Sayfaya git 1, 2  Sonraki

Tüm zamanlar UTC + 2 saat [ GITZ ]


Kimler çevrimiçi

Bu forumu gezen kullanıcılar: Hiç bir kayıtlı kullanıcı yok ve 2 misafir


Bu foruma yeni başlıklar gönderemezsiniz
Bu forumdaki başlıklara cevap veremezsiniz
Bu forumdaki mesajlarınızı düzenleyemezsiniz
Bu forumdaki mesajlarınızı silemezsiniz
Bu foruma eklentiler gönderemezsiniz

Aranacak:
Geçiş yap:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group

Türkçe çeviri: phpBB Türkiye