0

I have a couple of sliders, a checkbox with two options that I set to False, and a reset button, as follows:

#Slider
slider_M = plt.axes(rectM, facecolor=axcolor)   
svalueM = Slider(slider_M, 'M', s_Mmin, s_Mmax, valinit=s_Minit, valfmt="%1.2f")
svalueM.on_changed(updateChart) 

#CheckBox
ShkBox = plt.axes(rectC,facecolor=axcolor)
CheckPar = CheckButtons(ShkBox, ('Strong', 'Weak'), (False, False)) 
CheckPar.on_clicked(updateChart)

#Reset Button
resetax = plt.axes(rectR, facecolor=axcolor)
button = Button(resetax, 'Reset', color=axcolor, hovercolor='0.975')
button.on_clicked(resetplt)

In my reset routine I use the following to reset my slider and CheckButtons:

def resetplt(event)
    svalueM.reset()   #Reset Slider
    CheckPar.set_active(0)  # Reset Checkbox

The issue is with the above, CheckPar.set_active(0) toggles the value of the FIRST checkbox. What I want is to reset both checkboxes to the original value of "False".

This appears doable in Tkinter and Java but I am unable to implement with matplotlib. The matplotlib documentation says to use

set_active(self, index)

to Directly (de)activate a check button by index, where index is an index into the original label list.

Unfortunately, I do not know how to implement this and I am unable to find any examples of where someone did. Things I've tried include:

CheckPar.set_active(0)
CheckPar.set_active(("Strong","Weak"),(0, 0))
CheckPar.set_active([0],[1])

The last two options result in errors of the type

TypeError: set_active() takes 2 positional arguments but 3 were given

I am able to determine the status of the boxes using

status = CheckPar.get_status()

But I cannot reset them to their original value.

Any help would be appreciated.

Thanks

1 Answer 1

1

You have to know the state of the boxes in their original state, then iterate through the boxes, and switch their state only if the current state does not match the original one.

See this test:

def resetplt(event):
    for i, (state, orig) in enumerate(zip(CheckPar.get_status(), origState)):
        if not state == orig:
            CheckPar.set_active(i)  # switch state


fig, (ax1, ax2) = plt.subplots(1, 2)

# CheckBox
origState = (False, True)
ShkBox = plt.axes(ax1)
CheckPar = CheckButtons(ShkBox, ('Strong', 'Weak'), origState)

# Reset Button
resetax = plt.axes(ax2)
button = Button(resetax, 'Reset', color=axcolor, hovercolor='0.975')
button.on_clicked(resetplt)

plt.show()
Sign up to request clarification or add additional context in comments.

1 Comment

Very nice! Works great!! Thanks for your help.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.