Entry boxes enabled with checkbox, but multiple rows created in a for loop

I have this code for a single row of entry boxes, which works ok, but I want to generate multiple rows of these; I can do the entry boxes OK in a for loop by appending them to a pre-declared set of empty lists, but struggling to understand how to get the variables for each checkbox to be unique.

checkM1 = tk.IntVar()

def set_activeM1():
    if checkM1.get() == 1:
        ent_min_M1.config(state="normal")
        ent_sec_M1.config(state="normal")
        ent_pwr_M1.config(state="normal")
        ent_cad_M1.config(state="normal")
    elif checkM1.get() == 0:
        ent_min_M1.config(state="disabled")
        ent_sec_M1.config(state="disabled")
        ent_pwr_M1.config(state="disabled")
        ent_cad_M1.config(state="disabled")


lbl_tim_M1      = tk.Label(frm_mult, text = "Time", width=4)
ent_min_M1      = EntryLen(frm_mult, max_len=2, max_val=99, width=2,  state = "disabled", disabledbackground=DisabledColour)
lbl_col_M1      = tk.Label(frm_mult, text = ":", width=1)
ent_sec_M1      = EntryLen(frm_mult, max_len=2, max_val=60, width=2,  state = "disabled", disabledbackground=DisabledColour)
ent_pwr_M1      = EntryLen(frm_mult, max_len=3, max_val=999, width=3, state = "disabled", disabledbackground=DisabledColour)
ent_cad_M1      = EntryLen(frm_mult, max_len=3, max_val=150, width=3, state = "disabled", disabledbackground=DisabledColour)
chk_but_M1      = tk.Checkbutton(frm_mult, variable=checkM1, command=set_activeM1)

lbl_tim_M1.grid(row=2, column = 0, sticky="w")
ent_min_M1.grid(row=2, column = 1, sticky="w")
lbl_col_M1.grid(row=2, column = 2, sticky="w")
ent_sec_M1.grid(row=2, column = 3, sticky="w")
ent_pwr_M1.grid(row=2, column = 4, sticky="w")
ent_cad_M1.grid(row=2, column = 5, sticky="w")
chk_but_M1.grid(row=2, column = 6, sticky="w")

I’d recommend creating a class - make the widgets attributes along with the variable, and pass in the frame to use as a parent as a parameter to __init__(). By making set_active() a method, you can take advantage of a useful feature - you can pass self.set_active to command=, creating a “bound method” which will remember which object it was fetched from. You could make the class inherit from tk.Frame, but personally I reckon it’s better to just make that another attribute.

I think that’s a little beyond my current level of understanding!
I’m going through various GUI Youtube videos, but have not as yet come across anything that does ALL I want it to do. I have built a complete &working version of what I wanted using Tcl/Tk, and thought it would be not too hard to convert it all to Python - seems I was wrong!

Obviously I could just copy all the code I posted & amend the numbers, it would work but be very long and extremely poor coding, I want to learn how to do it properly: a lot more learning to do as yet!

Kev P.