Render param.String as Markdown

I have a simple param class where I have a string parameter that can hold markdown text. I’m interested in figuring out how would I render that using the panel panel.Param class.

classTest(param.Paramerterized):
    title = param.String('###Holds some Markdown Text')
    
    param_a = param.String('###A Title')
    param_b = param.String('###B Title')
    param_c = param.String('###C Title')

    param_x = param.Selector(['X', 'Y', 'Z'])
    param_y = param.Selector(['X', 'Y', 'Z'])
    param_z = param.Selector(['X', 'Y', 'Z'])

t = Test()

layout = pn.Column(pn.pane.Markdown(t.title), # This works
                                pn.Param(t.param, 
                                                 parameters = ['param_a', 'param_b', 'param_c',],
                                                 widgets={'param_a': pn.pane.Markdown,
                                                                'param_b': pn.pane.Markdown,
                                                                'param_c': pn.pane.Markdown
                                                                },
                                                 ) # This does not work
                                )
layout

Any help would be appreciated

As far as I’m aware you can’t render a param directly as a Markdown pane. However, you can reactively update the object of a markdown pane whenever a given param changes. See the code below for an example:

import panel as pn
import param

class Test(param.Parameterized):
    title = param.String('### Holds some Markdown Text')
    
    param_a = param.String('### A Title')
    param_b = param.String('### B Title')
    param_c = param.String('### C Title')

t = Test()
md_pane_a = pn.pane.Markdown(t.param_a)
md_pane_b = pn.pane.Markdown(t.param_b)
md_pane_c = pn.pane.Markdown(t.param_c)

@pn.depends(t.param.param_a, watch=True)
def update_pane_a(event):
    md_pane_a.object = t.param_a

@pn.depends(t.param.param_b, watch=True)
def update_pane_b(event):
    md_pane_b.object = t.param_b

@pn.depends(t.param.param_c, watch=True)
def update_pane_c(event):
    md_pane_c.object = t.param_c

layout = pn.Column(
    pn.pane.Markdown(t.title), # This works
    md_pane_a,
    md_pane_b,
    md_pane_c,
)
layout
1 Like