Rename the label in tkinter

Tags: , ,



I work with tkinter. I want to change the name of the labels. By entering the characters in the field and hitting the button, the labels are renamed one by one. That is, the first time I enter the character “Hello”, then that character is inserted in the label; It is then removed from the field. This time I have to enter a character for the next label. And so on until the end (With the help of the for loop). I did this but it only works for the first label and does not go to the next label):

win=Tk()
size=3
lbls=[]
frms=[]
def func():
    for i in range(6,9):
        lbls[i].configure(text=name.get())
        
for i in range(size):
    for j in range(size):
        frm=Frame(win,bd=2,relief="sunken")
        frm.grid(row=i,column=j)
        frms.append(frm)
        lbl=Label(frm,bg="white",fg="red",width="5")
        lbl.grid(row=0,column=0)
        lbls.append(lbl)
name=Entry(win)
name.grid(row=4,column=0)
btn=Button(win,text="Start",font=("Arial",14),command=func)
btn.grid(row=3,column=0)
win.mainloop()

Answer

You need to use a counter and increase it inside the function. Basically, for loop wont wait for you to type in something and press the button:

counter = 0
def func():
    global counter

    lbls[counter].configure(text=name.get()) 
    
    counter += 1 # Increase it by 1
    if counter >= len(lbls): # If counter is greater than items in list, then reset
        counter = 0
    name.delete(0,'end') # Clear the entry

This will keep updating the text each time you press the button.


Some designing tip: Add columnspan for your button and entry

name.grid(row=4,column=0,columnspan=3)
btn.grid(row=3,column=0,columnspan=3)


Source: stackoverflow