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
listdiye bir değişken yazdığınızda Python’dakilistartı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ızfordöngüsünden sonra,[None, None]görürsünüz. Sebebine linkteki konudan ulaşırsınız (oradagridburadapack; 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 teklistenin elemanlarını dolaşmalıyız,fordö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).