I am trying to create a button from ipywidgets.Button instance that will save a specific figure once it's pressed. But using the following Ipython notebook leads to multiple file savings once the button has been hit:
import numpy as np
from ipywidgets import interact, interactive,FloatSlider,IntSlider,Button
from IPython.display import display
import matplotlib.pylab as plt
%matplotlib inline
button = Button(description="Savefig")
display(button)
def plotfields(p,a):
fig,ax = plt.subplots(1,2,figsize=(4*2,4),sharey=True)
X,Y=np.meshgrid(np.linspace(0,100,100),np.linspace(0,100,100))
b1 = np.sin(p*X)*np.cos(a*Y)
b2 = np.sin(a*X)*np.cos(p*Y)
ax[0].imshow(b1,aspect='auto')
ax[1].imshow(b2,aspect='auto')
ax[0].set_ylabel(r'$t$')
ax[0].set_xlabel(r'$x$')
ax[1].set_xlabel(r'$x$')
plt.tight_layout()
def on_button_clicked(b):
fig.savefig("test_p{:.3s}_a{:.3s}.eps".format(str(int(100*p)),str(int(100*a))))
fig.savefig("test_p{:.3s}_a{:.3s}.png".format(str(int(100*p)),str(int(100*a))))
button.on_click(on_button_clicked)
p_w = FloatSlider(min=0.01, max=1, step=0.01, value=0.01)
a_w = FloatSlider(min=0.01, max=1, step=0.01, value=0.01)
interact(plotfields,p=p_w,a=a_w)