У меня был немного другой код, но я изменил его после ответа здесь:
Tkinter: виджет Addressing Label, созданный для l oop
#some starting code here
NOC_var = StringVar(frm_NOC)
NOC_var.set(NOC_list[0])
NOC_opt = OptionMenu(frm_NOC, NOC_var, *NOC_list)
NOC_opt.config(width=20, bg = 'white')
lbl_NOC.grid(row = 0, column = 0)
NOC_opt.grid(row = 0, column = 1)
frm_NOC.grid(row = 0, column = 0, sticky = 'w')
# Course Data
lbl_course = []
ent_course = []
lbl_ob_marks = []
ent_ob_marks = []
lbl_t_marks = []
ent_t_marks = []
def noc(*args): #noc = number of courses
frm_crs_data = Frame(frm_crs, bg = 'white')
frm_crs_data.grid(row = 1, column = 0, pady = 50)
del lbl_course[:]
del ent_course[:]
del lbl_ob_marks[:]
del ent_ob_marks[:]
del lbl_t_marks[:]
del ent_t_marks[:]
n_o_c = int(NOC_var.get())
for i in range(n_o_c):
# Course Name
lbl_course.append(Label(frm_crs_data, text = "Course name:", bg = 'white', font = (12)))
ent_course.append(Entry(frm_crs_data, width = 25, bg = 'white'))
# Obtained Marks
lbl_ob_marks.append(Label(frm_crs_data, text = "Obtained marks:", bg = 'white', font = (12)))
ent_ob_marks.append(Entry(frm_crs_data, width = 5, bg = 'white'))
# Total Marks
lbl_t_marks.append(Label(frm_crs_data, text = "Total marks:", bg = 'white', font = (12)))
ent_t_marks.append(Entry(frm_crs_data, width = 5, bg = 'white'))
lbl_course[i].grid(row = i, column = 0, padx = 1)
ent_course[i].grid(row = i, column = 1, padx = 10)
lbl_ob_marks[i].grid(row = i, column = 2, padx = 3)
ent_ob_marks[i].grid(row = i, column = 3, padx = 5)
lbl_t_marks[i].grid(row = i, column = 4, padx = 5)
ent_t_marks[i].grid(row = i, column = 5)
NOC_var.trace("w", noc)
Проблема в том, что если я выберу 4 из раскрывающегося меню, он создаст комбинацию из 4 виджетов (это нормально), но теперь, если я выберу 2 из раскрывающегося меню, он не удаляет ранее созданные виджеты, но сохраняет все созданные ранее. . Прошло три дня, я застрял над той же проблемой. Я попытался выполнить поиск по всей сети, но не нашел решения.