Pannello in Python - Come impostare l'ordine in cui vengono chiamati gli eventi

Jan 09 2021

Sto costruendo una dashboard usando panel e sto cercando di capire come fare in modo che una modifica di un controllo ("soglia" nella classe sottostante) attivi un processo che aggiorna un attributo della classe prima che venga chiamata qualsiasi altra funzione che utilizzerà quell'attributo . Fondamentalmente, una modifica nel widget di soglia dovrebbe modificare un attributo self.table e quindi più di 1 funzioni faranno riferimento ad esso per creare tabelle e grafici per il dashboard. Come farlo accadere? Questo è l'inizio della classe in cui vengono dichiarati i widget e la classe inizializzata ....

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)

Risposte

1 SandervandenOord Jan 10 2021 at 04:14

Ecco un esempio in cui una modifica alla soglia di un parametro cambia il valore di un valore booleano e, poiché tale valore booleano cambia, altri aggiornamenti vengono attivati ​​successivamente:

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)

Ecco alcune altre domande + risposte utilizzando lo stesso meccanismo:

Usa il pulsante per attivare l'azione nel pannello con la classe parametrizzata e quando l'azione del pulsante è terminata aggiorna un'altra dipendenza (Holoviz)

Come aggiorno automaticamente un widget di selezione a discesa quando viene modificato un altro widget di selezione? (Pannello Python pyviz)