Download this notebook from GitHub (right-click to download).

import panel as pn


The DiscretePlayer widget displays media-player-like controls that allow playing and stepping through the provided options. When playing it triggers events at a pre-defined interval on the frontend, advancing the player value each time. It falls into the broad category of single-value, option-selection widgets that provide a compatible API and include the AutocompleteInput, Select and DiscreteSlider widgets.

For more information about listening to widget events and laying out widgets refer to the widgets user guide. Alternatively you can learn how to build GUIs by declaring parameters independently of any specific widgets in the param user guide. To express interactivity entirely using Javascript without the need for a Python server take a look at the links user guide.


For layout and styling related parameters see the customization user guide.


  • direction (int): Current play direction of the Player (-1: playing in reverse, 0: paused, 1: playing).

  • interval (int): Interval in milliseconds between updates

  • loop_policy (str): Looping policy; must be one of ‘once’, ‘loop’, or ‘reflect’

  • options (list or dict): A list or dictionary of options to select from

  • value (object): The current value; must be one of the option values

  • value_throttled (object): The current value throttled until mouseup (when selected using slider)


  • disabled (boolean): Whether the widget is editable

  • name (str): The title of the widget

  • show_loop_controls (boolean): Whether radio buttons allowing to switch between loop policies options are shown

The widget has a number of buttons to go to the first or last value, step forward or backward, and play and pause the widget. It also provides control over the loop_policy, which determines whether to play ‘once’, ‘loop’, or ‘reflect’. Additionally - and + buttons slow down and speed up the player speed.

discrete_player = pn.widgets.DiscretePlayer(name='Discrete Player', options=[2, 4, 8, 16, 32, 64, 128], value=8, loop_policy='loop')


Like most other widgets, DiscretePlayer has a value parameter that can be accessed or set:


The DiscretePlayer can be controlled programmatically using the direction parameter which has three possible states:

  • -1: playing in reverse

  • 0: paused

  • 1: playing

Alternatively it can be controlled via the .play, .pause and .reverse methods:

import time



The DiscretePlayer widget exposes a number of options which can be changed from both Python and Javascript. Try out the effect of these parameters interactively:

pn.Row(discrete_player.controls(jslink=True), discrete_player)
This web page was generated from a Jupyter notebook and not all interactivity will work on this website. Right click to download and run locally for full Python-backed interactivity.

Download this notebook from GitHub (right-click to download).