Я действительно создал что-то подобное!
class NewWindowWithNControls:
def __init__(self, number_of_controls):
self.root = Toplevel()
windowWidth = self.root.master.winfo_reqwidth()
windowHeight = self.root.master.winfo_reqheight()
# Gets both half the screen width/height and window width/height
positionRight = int(self.root.winfo_screenwidth() / 2 - windowWidth / 2)
positionDown = int(self.root.winfo_screenheight() / 2 - windowHeight / 2)
y_pad = "3"
self.rows = 0
self.root.geometry("+%s+%s" % (positionRight, positionDown - 200))
self.root.title("Plan From File")
self.root.configure(background=menu_background_color)
self.input_data_list= list()
for i in range(int(number_of_controls)):
data_input_dict = dict()
data_input_dict ['data_header_key'] = Entry(self.root)
data_input_dict ['data_header_key'].configure(background=entry_box_background,
foreground=text_color,
width=25)
data_input_dict ['data_header_key'].grid(row=self.rows, column=0, sticky='w', pady=y_pad)
data_input_dict ['data_header_key'].bind('<Control-a>', select_text)
data_input_dict ['data_header_key'].insert(0, '')
self.rows += 1
self.input_data_list.append(data_input_dict )
По сути, он создает словарь для каждой серии элементов управления (если вы хотите также несколько текстовых полей в одной строке, если вам нужно только вы один, вы можете пропустить часть словаря и просто удерживать ее в списке), а затем сохраните ее в списке, который содержит всю информацию для всех n элементов управления, позже вы получите доступ к этому списку, чтобы получить ввод из текстовых полей
В родительском окне вы создаете что-то вроде этого:
self.number_of_controls_entry = Entry(self.root)
self.number_of_controls_entry.configure(background=entry_box_background,
foreground=text_color,
width=8)
self.number_of_controls_entry.grid(row=self.rows, column=1, sticky='e')
self.number_of_controls_entry.bind('<Control-a>', select_text)
self.number_of_controls_entry.insert(0, '')
self.rows += 1
self.apply_btn = Button(self.root)
self.apply_btn.configure(background=widget_background_color, foreground=text_color, width=10)
self.apply_btn.grid(row=self.rows, column=0, pady=15, padx=30, columnspan=2, sticky='nsew')
self.apply_btn.configure(text='''Apply''')
self.apply_btn.configure(command=lambda: self.apply_changes(self.number_of_controls_entry.get()))
def apply_changes(self, number_of_controls):
self.root.destroy()
NewWindowWithNControls(number_of_controls)