LiteralInput#
Download this notebook from GitHub (right-click to download).
import panel as pn
import panel_material_ui as pmui
pn.extension()
The LiteralInput
widget allows entering any valid Python literal (such as a number, string, list, dict, or tuple) using a text input box. This is useful for quickly entering and editing Python objects in dashboards and notebooks.
You can optionally set a type
to validate the literal before updating the parameter. The serializer
parameter lets you choose between Python’s ast.literal_eval
(default) and JSON serialization for parsing and formatting values.
Parameters:#
Core#
disabled
(boolean): Whether the widget is editableenter_pressed
(event): An event that triggers when the<enter>
key is pressed.
serializer
: The serialization method to use ('ast'
or'json'
).type
: The expected Python type (e.g.,dict
,list
,tuple
,int
,float
,bool
,str
).value
: The current value, parsed as a Python literal.value_input
(str
): The current value as a string, updated on every key press.
Display#
color
(str): A color variant'default'
(white),'primary'
(blue),'success'
(green),'info'
(yellow),'light'
(light), or'danger'
(red).
error_state
: Indicates if the input could not be parsed as a valid literal.
max_length
(int): The maximum number of allowed characters.label
(str): The title of the widgetplaceholder
(str): A placeholder string displayed when no value is entered.size
(Literal["small", "medium"]
): The size variant of the widget.variant
(Literal["filled", "outlined", "standard"]
): The variant of the input field.
Styling#
sx
(dict): Component level styling API.theme_config
(dict): Theming API.
Aliases#
For compatibility with Panel certain parameters are allowed as aliases:
name
: Alias forlabel
For more details on customization, see the customization guides, layout, and styling how-to guides.
Basic Usage#
The LiteralInput
widget can be used to enter any valid Python literal. For example, you can enter a number, a string, a list, a dictionary, or a tuple
literal_input = pmui.LiteralInput(label='Enter a literal', value={"a", 1})
literal_input
LiteralInput.value
returns a literal type that can be read out and set like other widgets:
literal_input.value
Placeholder#
The LiteralInput
widget supports a placeholder
which is displayed when the value
is None
:
pmui.LiteralInput(label='Enter a literal', value=None, placeholder='e.g. 42, [1,2,3], {"a": 1}')
Value Input#
The LiteralInput.value
is updated after an enter_pressed
event or when switching focus, i.e. when clicking or tabbing away from the widget. To get the current str
value after every keystroke you can inspect the value_input
instead:
literal_input = pmui.LiteralInput(label='Value', value={"a": 1})
pmui.Column(
literal_input,
pmui.Row(pn.pane.Str(literal_input.param.value), pn.pane.Str(literal_input.param.value_input))
)
Enter Pressed#
The enter_pressed
parameter is triggered when the ENTER key is pressed
literal_input_enter = pmui.LiteralInput(label="Press ENTER", value="abc")
enter_count = pn.rx(0)
def update_enter_count(event):
enter_count.rx.value += 1
pn.bind(update_enter_count, literal_input_enter.param.enter_pressed, watch=True)
pmui.Column(literal_input_enter, enter_count)
Maximum Length#
The max_length
controls the maximum number of characters that can be entered:
pmui.LiteralInput(label='Enter a literal', value={"a", 1}, max_length=12)
Error State#
If the input cannot be parsed as a valid Python literal, the widget will indicate an error state, e.g. try entering []
and hit enter:
pmui.LiteralInput(label='Invalid input', type=dict, value={})
By changing the value to [}
you will change the error_state
.
Type and Serializer#
Optionally, you can specify the expected type
and the serializer
method (either 'ast'
for Python literals or 'json'
for JSON data).
ast_input = pmui.LiteralInput(label='Enter a literal', type=dict, serializer="ast", value={'a': 1}, placeholder='e.g. 42, [1,2,3], {"a": 1}')
json_input = pmui.LiteralInput(label='Enter a literal', type=dict, serializer="json", value={'a': 1}, placeholder='e.g. 42, [1,2,3], {"a": 1}')
def to_type(value):
return str(type(value))
pmui.Row(
pmui.Column(ast_input, pn.pane.Str(ast_input.param.value)),
pmui.Column(json_input, pn.pane.Str(json_input.param.value)),
)
DictInput, ListInput, and TupleInput#
Specialized versions of LiteralInput
are available for entering dictionaries, lists, and tuples. These widgets ensure the value is always of the expected type.
pmui.DictInput(label='Enter a dictionary', placeholder="e.g. {'a': 1, 'b': 2}")
pmui.ListInput(label='Enter a list', placeholder='e.g. [1, 2, 3]')
pmui.TupleInput(label='Enter a tuple', placeholder='e.g. (1, 2, 3)')
Disabled and Loading#
pmui.LiteralInput(label='Enter a literal', value=42, placeholder='e.g. 42, [1,2,3], {"a": 1}', disabled=True, loading=True)
Color Options#
You can set the color
parameter to visually distinguish the LiteralInput
when active. Available options include “default”, “primary”, “secondary”, “error”, “info”, “success”, “warning”, “light”, “dark”, and “danger”:
pmui.FlexBox(
*[pmui.LiteralInput(label=color, color=color) for color in pmui.TextInput.param.color.objects]
)
Size#
The size
parameter allows toggling between “small”, “medium” (default) and “large” sized input fields:
pmui.FlexBox(
pmui.LiteralInput(label='Small', size="small"),
pmui.LiteralInput(label='Medium', size="medium"),
)
Variant#
The variant
parameter controls the visual style of the input. Choose from “filled”, “outlined” (default), or “standard”:
pmui.FlexBox(
pmui.LiteralInput(label='Filled', variant="filled"),
pmui.LiteralInput(label='Outlined', variant="outlined"),
pmui.LiteralInput(label='Standard', variant="standard"),
)
Description Tooltip#
pmui.LiteralInput(label='Enter a literal', value=42, description="A tooltip shown when hovering")
API Reference#
Parameters#
The LiteralInput
exposes a number of options which can be changed from both Python and Javascript. Try out the effect of these parameters interactively:
pmui.LiteralInput(label='LiteralInput').api(jslink=True)
References#
Panel Documentation:
Material UI TextField:
Download this notebook from GitHub (right-click to download).