I wish to create a custom calculator where the user defines two parameters and a function using a GUI and when they click on calculate it executes their user defined function passing the two parameters.
argument1 = IntSlider( … )
argument2 = IntSlider( … )
userDefinedFunction = TextArea( … )
calculateButton = Button ( … )
calculateButton.on_click(userDefinedFunction)
So that let’s say somebody defines :
argument1 = 3
argument2 = 4
userDefinedFunction = def udf(arg1,arg2): return arg1**2 + arg2**2
Would return 25 as 3*3 + 4*4 = 25
.
UPDATE : Found a way to get it working but only with lambda functions. I am working towards full fledged functions that can accept xarray.DataSet
as arguments and return the resulting xarray.DataSet
.
import panel as pn
import panel.widgets as pnw
pn.extension()
number1 = pnw.IntSlider(name='Number 1', start=0, end=10, step=1, value=3)
number2 = pnw.IntSlider(name='Number 2', start=0, end=10, step=1, value=4)
user_defined_function = pnw.input.TextAreaInput(name='Text Area Input', value='arg1**2 + arg2**2')
def udf_output(arg1,arg2,udf):
result_calculated = eval(f"lambda arg1, arg2: {udf}")
return result_calculated(arg1,arg2)
result = pn.bind(udf_output, arg1=number1,arg2=number2,udf=user_defined_function)
pn.Row(pn.WidgetBox(number1,number2,user_defined_function),result)