I have a Selector and depending on its value I’d like one set of widgets displayed in a column layout or another set of widgets.
My code is:
class A(param.Parameterized):
select = param.Selector(objects=['opt1', 'opt2'])
field1 = param.Selector(objects=['a1', 'a2', 'a3'], label='Field1')
number1 = param.Number(3)
field2 = param.Selector(objects=['b1', 'b2', 'b3'], label='Field2')
number2 = param.Number(5)
def __init__(self, **param):
super(A, self).__init__(**param)
panel1 = pn.panel(self.param, parameters=['field1', 'number1'], widgets={'field1': pn.widgets.RadioButtonGroup})
self.col1 = pn.Column(*panel1[1:])
panel2 = pn.panel(self.param, parameters=['field2', 'number2'], widgets={'field2': pn.widgets.RadioButtonGroup})
self.col2 = pn.Column(*panel2[1:])
self.column = pn.Column(panel, self.col1)
@param.depends('select', watch=True)
def _update_select(self):
if self.select == 'opt1':
self.column[1] = self.col1
elif self.select == 'opt2':
self.column[1] = self.col2
def panel(self):
return self.column
a = A()
a.panel()
This works but the part where I create both columns to swap out feels a bit clumsy to me, where I make a panel with two selected params, override one default widget and then chop off the title to get the output I would like to have.
Is there a function in panel where you can create a widget from a parameter in a one-to-one fashion? For example:
widget = pn.make_widget(self.param['field1'], pn.widgets.RadioButtonGroup)
Or other ways to do this better? Possibly related to: https://github.com/holoviz/panel/pull/1322