vendredi 19 février 2016

Tkinter Checkbutton State Change using Dictionaries

StackOverflow,

So I'm still working on this GUI in Tkinter and I've set up my checkbutton dictionaries and whatnot. Essentially I have one main checkbutton group, then 3 sub-checkbutton groups whose states should be changed according to which button is active in the main checkbutton group. My problem is, however, only the last checkbutton of the sub-checkbutton groups is becoming active, while those above it remain disabled.

Here is the code:

def enable_location_state():

#Retrieve values to determine whether or not the checkbutton is checked
#0 is off, 1 is on
dt1 = datatype['Joint Angle'].get()
dt2 = datatype['Joint Acceleration'].get()
dt3 = datatype['Ground Reaction Force'].get()
dt4 = datatype['Muscle Activation'].get()


if dt1 == 1 or dt2 == 1:
    ja_cb.configure(state=ACTIVE)
elif dt1 == 0 and dt2 == 0:
    ja_cb.configure(state=DISABLED)

if dt3 == 1:
    grf_cb.configure(state=ACTIVE)
elif dt3 == 0:
    grf_cb.configure(state=DISABLED)

if dt4 == 1:
    emg_cb.configure(state=ACTIVE)
elif dt4 == 0:
    emg_cb.configure(state=DISABLED)


ilabel1 = Label(root, text=' Measurement',font=("Bold",18)).grid(row=1,column=0)

#Options for the checkbuttons
datatype = {'Joint Angle' : 0,
         'Joint Acceleration' : 0,
         'Ground Reaction Force' : 0,
         'Muscle Activation' : 0
}


for measure in datatype:
    datatype[measure] = IntVar()
    dt_cb = Checkbutton(root, text=measure,
                        variable=datatype[measure],command =     enable_location_state)
    dt_cb.grid(column=0, sticky='W', padx=20)



#EMG
ilabel2 = Label(root, text='Muscle Group(s)',font=("Bold",18),padx=30).grid(row=1,column=1)

emg_groups = {'Quadriceps' : 0,
              'Hamstrings' : 0,
              'Calves' : 0
}

for i, measure in enumerate(emg_groups):
    emg_groups[measure] = IntVar()
    emg_cb = Checkbutton(root, text=measure,     variable=emg_groups[measure],state=DISABLED)
    emg_cb.grid(column=1, row=i+2, sticky='W', padx=30)

emg1 = emg_groups['Quadriceps'].get()
emg2 = emg_groups['Hamstrings'].get()
emg3 = emg_groups['Calves'].get()


ilabel3 = Label(root, text='Ground Reaction Force',font=("Bold",18),padx=30).grid(row=1,column=2)

grf_groups = {'Ground Reaction Force' : 0,
              'Gait' : 0,
}

for i, measure in enumerate(grf_groups):
    grf_groups[measure] = IntVar()
    grf_cb = Checkbutton(root, text=measure,     variable=grf_groups[measure],state=DISABLED)
    grf_cb.grid(column=2, row=i+2, sticky='W', padx=30)

grf1 = grf_groups['Ground Reaction Force'].get()
grf2 = grf_groups['Gait'].get()


#JOINT ANGLES - Both Acceleration and Angles
ilabel4 = Label(root, text='Joints',font=("Bold",18)).grid(row=1,column=3)

ja_groups = {'Hips' : 0,
              'Knees' : 0,
              'Ankles' : 0,
}

for i, measure in enumerate(ja_groups): 
    ja_groups[measure] = IntVar()
    ja_cb = Checkbutton(root, text=measure, variable=ja_groups[measure],state=DISABLED)
    ja_cb.grid(column=3, row=i+2, sticky='W', padx=20)

ja1 = ja_groups['Hips'].get()
ja2 = ja_groups['Knees'].get()
ja3 = ja_groups['Ankles'].get()

The "main" checkbutton group is the datatype dictionary/group, and the subgroups are the EMG, GRF, and JA groups. I honestly don't know how to read individual states/values of checkbuttons made with dictionaries, either, and I think knowing how to do that would be beneficial to this problem as well.

Thank you for your time.

Aucun commentaire:

Enregistrer un commentaire