Skip to main content
Ctrl+K
Logo image

Site Navigation

  • Getting Started
  • How-to
  • Explanation
  • Component Gallery
  • App Gallery
  • API Reference
  • Upgrade Guide
  • FAQ
  • About
  • Developer Guide

Site Navigation

  • Getting Started
  • How-to
  • Explanation
  • Component Gallery
  • App Gallery
  • API Reference
  • Upgrade Guide
  • FAQ
  • About
  • Developer Guide

FOR USERS

  • Getting Started
    • Installation
    • Build an app
    • Core Concepts
  • How-to
    • Prepare to develop
      • Develop in a notebook
        • Display Output in Notebooks
        • Develop in other notebook environments
      • Develop in an editor
        • Develop Apps in an Editor
        • Write apps in Markdown
    • Build apps
      • Construct individual components
        • Construct Panes
        • Access Pane Type
        • Access and Set Widget Values
        • Add or Remove Components from Panels
      • Styling components
        • Apply a Design
        • Toggling themes
        • Apply CSS
        • Customize Loading Icon
        • Control Visibility
      • Interactivity
        • Add interactivity to a function
        • Add reactivity to components
        • Make interactive data workflows
      • Arranging components
        • Customize Spacing
        • Align Components
        • Control Size
    • Use specialized UIs and APIs
      • Build a sequential UI
        • Create a Pipeline
        • Customize Pipeline Layout
        • Control Pipeline Flow
      • Build custom components
        • Combine Existing Components
        • Build Components from Scratch
      • Explicitly link parameters (Callbacks API)
        • Create High-Level Python Links with .link
        • Create Low-Level Python Links Using .watch
        • Link Two Objects in Javascript
        • Link Plot Parameters in Javascript
        • Link Many Objects in Javascript
      • Generate UIs from declared parameters (Declarative API)
        • Generate Widgets from Parameters
        • Declare Custom Widgets
        • Declare parameter dependencies
        • Create nested UIs
    • Manage session tasks
      • Register Session Callbacks
        • Use Asynchronous Callbacks
        • Defer Callbacks Until Load
        • Run Tasks at Session Start or End
        • Periodically Run Callbacks
        • Schedule Global Tasks
        • Modify Bokeh Models
      • Access Session State
        • Access and Manipulate the URL
        • Access HTTP Request State
        • Access Busyness state
    • Test and debug
      • Enable profiling and debugging
        • Enable the admin panel
        • Profile your Application
        • View application logs
      • Set up testing for an application
        • Test functionality and performance
        • Test UI rendering
        • Test operating capacity
    • Prepare to share
      • Apply Templates
        • Set a Template
        • Arrange Components in a Template
        • Toggle Modal
        • Customize Template Theme
        • Build a Custom Template
      • Improve Performance
        • Reuse sessions
        • Enable Throttling
      • Cache Data
        • Manually Cache
        • Automatically Cache
      • Improve Scalability
        • Load balancing
        • Launch multiple processes
        • Enable Automatic Threading
        • Use Asynchronous Processing
      • Add Authentication
        • Configuring Basic Authentication
        • Configuring OAuth
        • OAuth Providers
        • Accessing User information
    • Share your work
      • Configure the server
        • Launching a server on the commandline
        • Launching a server dynamically
        • Serving multiple applications
        • Connect to a remote server via SSH
        • Configuring a reverse proxy
        • Serving static files
      • Integrate with other servers
        • Integrating Panel with Flask
        • Integrating Panel with FastAPI
        • Running Panel apps inside Django
      • Deploy applications
        • Microsoft Azure
        • MyBinder
        • Google Cloud Platform (GCP)
        • Heroku
        • Hugging Face
      • Export apps
        • Embedding state
        • Save App to File
        • Access the Bokeh Model
      • Run panel in WebAssembly
        • Converting Panel applications
        • Using Panel in Pyodide & PyScript
        • Embedding in Sphinx documentation
        • Setting up JupyterLite
  • Explanation
    • APIs
      • API context
        • Reactive API
        • Declarative API
        • Callbacks
    • Components
      • Components overview
      • Custom components
    • Linking
      • Panel and JS communications
    • Styling
      • Templates
    • Dependencies
      • Panel and Param
      • Panel and Bokeh
    • Technology comparisons
      • Panel vs Dash
      • Panel vs ipywidgets
      • Panel vs Voila
      • Panel vs Streamlit
      • Panel vs JavaScript
      • Panel vs Bokeh
  • Component Gallery
    • Panes
      • Alert
      • Audio
      • Bokeh
      • DataFrame
      • DeckGL
      • ECharts
      • Folium
      • GIF
      • HTML
      • HoloViews
      • IPyWidget
      • Image
      • JPG
      • JSON
      • LaTeX
      • Markdown
      • Matplotlib
      • PDF
      • PNG
      • Param
      • Perspective
      • Plotly
      • Reacton
      • SVG
      • Str
      • Streamz
      • VTK
      • VTKJS
      • VTKVolume
      • Vega
      • Video
      • Vizzu
    • Layouts
      • Accordion
      • Card
      • Column
      • Divider
      • FlexBox
      • FloatPanel
      • GridBox
      • GridSpec
      • GridStack
      • Row
      • Swipe
      • Tabs
      • WidgetBox
    • Templates
      • Bootstrap
      • FastGridTemplate
      • FastListTemplate
      • GoldenLayout
      • Material
      • React
      • Slides
      • Vanilla
    • Global
      • Notifications
    • Indicators
      • BooleanStatus
      • Dial
      • Gauge
      • LinearGauge
      • LoadingSpinner
      • Number
      • Progress
      • Tqdm
      • Trend
    • Widgets
      • ArrayInput
      • AutocompleteInput
      • Button
      • CheckBoxGroup
      • CheckButtonGroup
      • Checkbox
      • CodeEditor
      • ColorPicker
      • CrossSelector
      • DataFrame
      • DatePicker
      • DateRangeSlider
      • DateSlider
      • DatetimeInput
      • DatetimePicker
      • DatetimeRangeInput
      • DatetimeRangePicker
      • DatetimeRangeSlider
      • Debugger
      • DiscretePlayer
      • DiscreteSlider
      • EditableFloatSlider
      • EditableIntSlider
      • EditableRangeSlider
      • FileDownload
      • FileInput
      • FileSelector
      • FloatInput
      • FloatSlider
      • IntInput
      • IntRangeSlider
      • IntSlider
      • JSONEditor
      • LiteralInput
      • MenuButton
      • MultiChoice
      • MultiSelect
      • PasswordInput
      • Player
      • RadioBoxGroup
      • RadioButtonGroup
      • RangeSlider
      • Select
      • SpeechToText
      • StaticText
      • Switch
      • Tabulator
      • Terminal
      • TextAreaInput
      • TextEditor
      • TextInput
      • TextToSpeech
      • Toggle
      • ToggleGroup
      • VideoStream
  • App Gallery
    • Portfolio Optimizer
    • Streaming Videostream
    • Windturbines
    • Portfolio Analyzer
    • Glaciers
    • Vtk Slicer
    • Nyc Deckgl
    • Gapminders
    • Vtk Interactive
    • Penguin Crossfilter
    • Deckgl Game Of Life
    • Hvplot Explorer
    • Xgboost Classifier
    • Altair Brushing
    • Vtk Warp
    • Iris Kmeans
    • Penguin Kmeans
  • API Reference
    • Cheat Sheet
    • Config
    • State
    • panel.io Package
    • panel.layout Package
    • panel.pane Package
      • panel.vtk Package
    • param Module
    • pipeline Module
    • panel.template Package
      • panel.bootstrap Package
      • panel.fast Package
        • panel.grid Package
        • panel.list Package
      • panel.golden Package
      • panel.material Package
      • panel.react Package
      • panel.slides Package
      • panel.vanilla Package
    • panel.util Package
    • viewable Module
    • panel.widgets Package
  • Upgrade Guide
  • FAQ
  • About
    • Releases

FOR DEVELOPERS

  • Developer Guide
    • Testing
  • How-to
  • Use specialized UIs and APIs
  • Link Parameters with Callbacks API

Link Parameters with Callbacks API#

If you need full control over how your GUI is set up then you can manually define widgets that link directly to other objects using either Python or JavaScript (JS) callbacks. Python callbacks are simple for Python users to write and can directly access Python data structures, while JS callbacks can directly manipulate the displayed HTML document and allow setting up dynamic behavior even for exported HTML files (with no Python process running). This section contains how-to guides that address common tasks related the use of callbacks.

Create High-Level Python Links with .link

How to use the convenient, high-level .link API to link parameters in Python.

Create Low-Level Python Links with .watch

How to use the flexible, low-level .watch API to trigger callbacks in Python.

Link Two Objects in Javascript

How to link parameters of two objects in Javascript.

Link Plot Parameters in Javascript

How to link Bokeh and HoloViews plot parameters in Javascript.

Link Many Objects in Javascript

How to write arbitrary Javascript callbacks linking one or more objects.

Examples#

Bokeh Property Editor

Build a UI that allows editing a Bokeh figure in JS.

Deck.gl

JS Link JSON editors to allow live editing a Deck.gl plot.

HoloViews

JS Link widgets to a glyph in a HoloViews plot.

Plotly

JS Link a widget to a Plotly plot.

Vega

JS Link a widget to a Vega plot.

previous

Build Components from Scratch

next

Create High-Level Python Links with .link

Support Panel with a star on GitHub
On this page
  • Examples

© Copyright 2019-2023 Holoviz contributors.

Created using Sphinx 5.3.0.

Built with the PyData Sphinx Theme 0.13.3.