Aslında yaklaşmışsınız, bir-iki değişiklik yeter gibi:
list = []
- Değişkenlerin isimlerini Python’daki halihazırda bulunan, rezerve edilmiş kelimelerden seçmemeye gayret etmek gerekir zira aksi takdirde Python’dakini “gölgelemiş” oluyoruz. Burada
list
diye bir değişken yazdığınızda Python’dakilist
artık fonksiyonunu kaybediyor ve sizin tanımladığınız listeye indirgeniyor. Bu, programın yanlış çalışmasına sebep olmayabilir ama “best practice” uğruna bundan kaçınmak gerekir. Mesela olur da Python’dakilist
’e işiniz düşerse, program hata verebilir. (Zaten editörünüz delist
’i farklı renkle gösteriyordur belki, oradan da anlaşılabilir). Velhasıl,liste = []
tercih edilebilir.
list.append(Entry(root,name=str(i),width=3).pack())
- Burada listeye eklediğiniz eleman neredeyse doğru; ama Tkinter ile geçmişi olan hatırısayılır sayıda kişinin şöyle ya da böyle düştüğü bir hata olan,
AttributeError: ‘NoneType’ object has no attribute ‘get’
mesajına da gebe olan, Tkinter widget’ının tanımlanması ile yerleştirilmesi olaylarının bir çırpıda yapılmasını görüyoruz. Listenin içindekileri yazdırırsanızfor
döngüsünden sonra,[None, None]
görürsünüz. Sebebine linkteki konudan ulaşırsınız (oradagrid
buradapack
; temel mevzu aynı) ve şöyle düzeltirsiniz:
for i in range(2):
bir_entry = Entry(root, name=str(i), width=3)
bir_entry.pack()
liste.append(bir_entry)
listveri = list.get()
- Burada demek istediğiniz “şu listeye koyduğum Entry’lerin içerisindekileri tek tek al”; ama bunu direkt
liste
üzerinden yapmamız na-mümkün. Bir şekilde tek tekliste
nin elemanlarını dolaşmalıyız,for
döngüsü bir yoldur:
for entry in liste:
entry_nin_verisi = entry.get()
print(entry_nin_verisi)
(list.append(Entry(root,name=str(i),width=3).pack())
olduğu gibi kalsaydı, bu adımda linkteki hatayı alırdık).