Это один из способов:
import tkinter as tk
root=tk.Tk()
root.title("Looping of entry box")
root.geometry("1200x600")
def ApplytoLabel():
xx=size.get()
for i in range(xx):
if box_list[i].cget('state') == 'normal':
element = box_list[i].get() # Get value from corresponding Entry
ArrayLabel=tk.Label(ArrayR,text="Array Element: " + element,font="Arial 12 bold",bg="red",fg="white",bd="5")
ArrayLabel.pack()
box_list[i].configure(state='disabled')
try:
box_list[i+1].configure(state='normal')
except IndexError: pass
break
box_list = [] # Create list of Entrys
def Boxes():
xx=size.get()
for i in range(xx):
box=tk.Entry(ArrayR,font="Arial 10 bold",bd="5",width="5",state='disabled' if i else 'normal')
box.pack(side="left")
box_list.append(box) # Append current Entry to list
ApplytoLabel1=tk.Button(ArrayR,text="Submit To Array",command=ApplytoLabel)
ApplytoLabel1.pack()
Array = tk.Frame(root)
Array.pack()
text1=tk.Label(Array,text="Enter the Size of Array:",
font="Arial 10 bold",fg="blue")
text1.grid(row=0,column=0,sticky="w")
size=tk.IntVar()
ArraySize=tk.Entry(Array,textvariable=size)
ArraySize.grid(row=0,column=1,sticky="w")
SizeofArray=tk.Button(Array,text="Submit",command=Boxes)
SizeofArray.grid(row=0,column=2,sticky="w")
ArrayR = tk.Frame(root)
ArrayR.pack()
root.mainloop()
В общем, вы, вероятно, захотите, чтобы каждая кнопка была на обратном вызове lambda
с ApplytoLabel
, получающим один параметр, чтобы вам не приходилось зацикливаться (и прерываться) каждый раз. Я также завернул бы все в классе.