Panel en Python: cómo establecer el orden en que se llaman los eventos

Jan 09 2021

Estoy construyendo un tablero usando el panel y tratando de averiguar cómo tener un cambio de control ("umbral" en la clase a continuación) desencadenar un proceso que actualiza un atributo de la clase antes de que se llame a otras funciones que usarán ese atributo. . Básicamente, un cambio en el widget de umbral debería cambiar un atributo self.table y luego más de 1 funciones lo harán referencia para crear tablas y gráficos para el tablero. ¿Cómo hacer que esto suceda? Este es el comienzo de la clase donde se declaran los widgets y se inicializa la clase ...

class BinaryPerformDashComponents(param.Parameterized):
    
    bins = param.ObjectSelector(default=10, objects=[], label='Number of Bins')
    threshold = param.Number(default=0.5, step=0.01, bounds=(0, 1), allow_None=False)
    
    
    def __init__(self, actual, pred, df, *args, **kwargs):
        
        super(type(self), self).__init__(*args, **kwargs)

        
        self.param.bins.objects =[5,10,20,50,100]  # set the list of objects to select from in the widget
        
        self.df = self.create_df(actual,pred,df)

Respuestas

1 SandervandenOord Jan 10 2021 at 04:14

Aquí hay un ejemplo en el que un cambio en el umbral de un parámetro cambia el valor de un booleano y, debido a que ese booleano cambia, se activan otras actualizaciones después de eso:

import param
import panel as pn
pn.extension()

class BinaryPerformDashComponents(param.Parameterized):
    
    bins = param.ObjectSelector(default=10, objects=[5,10,20,50,100], label='Number of Bins')
    threshold = param.Number(default=0.5, step=0.01, bounds=(0, 1))
    
    boolean_ = param.Boolean(True)
        
    @param.depends('threshold', watch=True)
    def _update_boolean(self):
        self.boolean_ = not self.boolean_
        
    @param.depends('boolean_', watch=True)
    def _update_bins(self):
        self.bins = 20
        
instance = BinaryPerformDashComponents()

pn.Row(instance)

Aquí hay algunas otras preguntas + respuestas usando el mismo mecanismo:

Use el botón para activar la acción en el Panel con clase parametrizada y cuando la acción del botón finalice, actualice otra dependencia (Holoviz)

¿Cómo actualizo automáticamente un widget de selección desplegable cuando se cambia otro widget de selección? (Pyviz del panel de Python)