Переменные, которые объявляют виджеты, должны быть объявлены отдельно, в противном случае последняя переменная перезапишет текущий виджет, а при вызове будет отображаться только последнее значение виджета.
Это можно исправить с помощью перечислениясписок. Техника перечисления индексирует объекты, а также выбирает каждый объект из списка одновременно.
Также необходимо объявить каждую текстовую переменную для виджета Entry, объявленной отдельно. Для этого каждая переменная будет добавлена в списоки затем этот список будет перечисляться при вызове переменных.
Вот решение,
import tkinter
from tkinter import *
root = Tk()
entries_list = []
path_list = []
button_list = []
label_list = []
var_list = []
x = 5 #int variable that define how many times will loop run
for var in range(0,x):
#always define a variable type before adding it to Entry Box
se = StringVar()
var_list.append(se)
def inputt():
# use enumerate for indexing the list
for p,q in enumerate(var_list):
l = Label(root,text="Device "+str(p+1)+":")
l.grid(row=p,column=0)
label_list.append(l)
e = Entry(root, textvariable = var_list[p], width=25)
e.grid(row=p, column=1)
b1 = Button(root,text="Next",command=lambda:load())
b1.grid(row=p+2,column=0)
def load():
# Entered values will loaded to entries_list when next button is pressed
for u,v in enumerate(var_list):
entries_list.append(var_list[u].get())
for j,k in enumerate(entries_list):
b3=Button(root, text=k)
b3.grid(row= j + x + 2,column=0,columnspan = 2,sticky = EW)
button_list.append(b3)
inputt()
root.mainloop()