{ "cells": [ { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import panel as pn\n", "\n", "pn.extension()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This example demonstrates **how to dynamically replace widgets in a layout** to create responsive user interfaces (requires a live Python server)." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "selector = pn.widgets.Select(\n", " value=pn.widgets.ColorPicker, options=[\n", " pn.widgets.ColorPicker,\n", " pn.widgets.DatePicker,\n", " pn.widgets.FileInput,\n", " pn.widgets.FloatSlider,\n", " pn.widgets.RangeSlider,\n", " pn.widgets.Spinner,\n", " pn.widgets.TextInput,\n", "], css_classes=['panel-widget-box'])\n", "\n", "row = pn.Row(selector, pn.widgets.ColorPicker(), pn.pane.Str())\n", "\n", "def update_value(event):\n", " row[2].object = 'Current Value: ' + str(event.new)\n", "\n", "def update_widget(event):\n", " widget = event.new()\n", " widget.param.watch(update_value, 'value')\n", " widget.param.trigger('value')\n", " row[1] = widget\n", "\n", "selector.param.watch(update_widget, 'value')\n", "selector.param.trigger('value')\n", "\n", "pn.Column(\n", " '## Dynamically generated user interfaces',\n", " row\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## App\n", "\n", "Lets wrap it into nice template that can be served via `panel serve dynamic_ui.ipynb`" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "pn.template.FastListTemplate(site=\"Panel\", title=\"Dynamic UI\", main=[\"This example demonstrates **how to dynamically replace widgets in a layout** to create responsive user interfaces\", row]).servable();" ] } ], "metadata": { "language_info": { "name": "python", "pygments_lexer": "ipython3" } }, "nbformat": 4, "nbformat_minor": 4 }