Tkinter döngü ile oluşturulan Entry nin adresi nedir?

Merhabalar ,
Bir listeden for döngüsü ile Label ve Entryler oluşturuyorum.
Ancak Entry deki veriyi almak için entryadı.get() fonksiyonu kullanmam gerekiyor döngü ile oluşturduğumda bu isme ulaşamıyorum örnek kod aşağıda yardımcı olabilir misiniz?

urun_olusturma = [[“Barkod No :”, “barkod_no”],
[“Ürün Adı :”,“urun_adi”],
[“Market Kodu :”,“market_kodu”],
[“Market Adı :”,“market_adi”],
[“Şube Adı :”,“sube_adi”],
[“Fiyatı :”,“fiyat”]]

for i in urun_olusturma:
Label(text = i[0]).pack()
Entry(text = i[1],width = 30).pack()

bu şekilde oluşturulan Enrty deki veriye nasıl ulaşabiliriz?

Tüm pencere araçlarını bir sözlüğe nesne olarak kaydedebilirsiniz. Yani şu şekilde

#coding: utf-8

from tkinter import *

pencere = Tk()
pencere.geometry("400x400")

def yazi_al(event = None):
    for i in widgets:
        print(widgets[i]["entry"].get())

# araçları tanımlama
widgets = {"barkod_no":
               {"label":Label(text = "Barkod No :"),"entry":Entry(text = "barkod_no",width = 30)},
           "urun_adi":
               {"label":Label(text = "Ürün Adı :"),"entry":Entry(text = "urun_adi",width = 30)},
           "market_kodu":
               {"label":Label(text = "Market Kodu :"),"entry":Entry(text = "market_kodu",width = 30)},
           "market_adi":
               {"label":Label(text = "Market Adı :"),"entry":Entry(text = "market_adi",width = 30)},
           "sube_adi":
               {"label":Label(text = "Şube Adı :"),"entry":Entry(text = "sube_adi",width = 30)},
           "fiyat":
               {"label":Label(text = "Fiyatı :"),"entry":Entry(text = "fiyat",width = 30)}
           }

for i in widgets: # Pencereye yerleştirme
    widgets[i]["label"].pack()
    widgets[i]["entry"].pack()


Button(text = "Test",command = yazi_al).pack() # butona tıklanınca tüm entry'lerdeki verileri yazar

mainloop()
3 Beğeni

Öncelikle cevap için teşekkürler.

Ben bu kadar uzun yazmamak için direkt ulaşabileceğim bir kısa yol var mı onu merak ediyorum.
ancak şimdilik bunu kullanacağım teşekkürler.

1 Beğeni

Önce şu:

Sonra yardımcı olacağım. :slight_smile:

Araçlara isim verebilirsiniz. Şöyle:
for s,i in enumerate(urun_olusturma):
l=Label(text=i[0],name=l+str(s)) gibi.
sonra “l1” ile çağırabilirsiniz mesela…Buradaki değişken adları önemli değil, “name=” ifadesi önemli.

mrb arkadaşlar
Bu Coderistan’ın kodunu incelediğimde pack() metodu ile widgetler tek tek oluşturuluyor fakat place(x=…,y=…) metodu ile yerleştirme yapmak istediğimde son widgeti yerleştiriyor. Neden böyle oluyor anlayamadım, tşkler…

Her bir widget için farklı x, y değerleri kullanmanız gerekiyor sanırım.

1 Beğeni

Ya bu tuhaflık var pack() metodu ile sıkıntı olmuyor. Place() metodu ile sıkıntı oluyor. aşağıdaki kodu inceler misiniz?


from tkinter import *

pencere = Tk()
pencere.geometry("800x500")

def yazi_al(event = None):
    for i in widgets:
        print(widgets[i]["entry"].get())

# araçları tanımlama
widgets = {"barkod_no":
               {"label":Label(text = "Barkod No :"),"entry":Entry(text = "barkod_no",width = 30)},
           "urun_adi":
               {"label":Label(text = "Ürün Adı :"),"entry":Entry(text = "urun_adi",width = 30)},
           "market_kodu":
               {"label":Label(text = "Market Kodu :"),"entry":Entry(text = "market_kodu",width = 30)},
           "market_adi":
               {"label":Label(text = "Market Adı :"),"entry":Entry(text = "market_adi",width = 30)},
           "sube_adi":
               {"label":Label(text = "Şube Adı :"),"entry":Entry(text = "sube_adi",width = 30)},
           "fiyat":
               {"label":Label(text = "Fiyatı :"),"entry":Entry(text = "fiyat",width = 30)}
           }

for i in widgets: # Pencereye yerleştirme
    a=1
    widgets[i]["label"].place(x=40,y=5+60*a)
    widgets[i]["entry"].place(x=220,y=5+60*a)
    a+=1

Button(text = "Test",command = yazi_al).pack() # butona tıklanınca tüm entry'lerdeki verileri yazar

mainloop()´´´´

Aşağıdaki kodlardaki a'yı for döngüsünün dışına alın sorun çözülür.

for i in widgets: # Pencereye yerleştirme
    a=1
    widgets[i]["label"].place(x=40,y=5+60*a)
    widgets[i]["entry"].place(x=220,y=5+60*a)
    a+=1

a yı for döngüsünün dışına alırsam a değeri artmadığı için widgetler aynı satırda çakışır. a yerine i ’ yi kullandığımda hata veriyor.
???

Nasıl artmıyor, şu aşağıdaki kodlarda sizce a'nın değeri artmıyor mu? a'yı dışarı aldım sorunsuz bir şekilde çalıştı.

a = 1
for i in widgets: # Pencereye yerleştirme
    widgets[i]["label"].place(x=40,y=5+60*a)
    widgets[i]["entry"].place(x=220,y=5+60*a)
    a += 1
1 Beğeni

Pardon kafam biraz bulanık yanlış anladım tşkler…(o ayrıntıyı nasıl kaçırdım kızıyorum kendime)

Kızmayın. kodları yazarken şöyle yapabilirsiniz. “Şurada şunu yapmak istedim, bakıyorum evet istediğim işlemi yapıyor. Şurada da şu işlemi yapmak istedim, bakıyorum olmadı. Niye olmadı, neyi yanlış yaptım, dur bir tekrar inceleyeyim yazdıklarımı… Hmm. Şurada bir değişiklik yapsak herhalde sorun çözülür… Bakalım… Evet. Oldu.” şeklinde böyle kendi kodlarınızla konuşa konuşa onları tekrar tekrar gözden geçirmeyi deneyin. Bu da bir yöntem.