Ho creato un widget a discesa:In IPython Widgets, come aggiornare il widget DropDown con un nuovo valore?
self.foo_widget = widgets.Dropdown(description='Lorem ipsum', width=100)
self.foo_widget.options = ['Default', 'A', 'B', 'C', 'D']
E io catturare l'evento on_trait_change
:
self.foo_widget.on_trait_change(self.handler, 'value')
Ora, nella funzione di gestore handler
, voglio impostare il valore di discesa di nuovo a 'Default'
. Ma il codice seguente cambia solo il valore senza aggiornare la visualizzazione del widget. Il DropDown mostra ancora il valore di selezione originale (ad es., 'C') anche se print self.foo_widget.value
mostra di essere 'Predefinito'.
self.foo_widget.value = 'Default'
Si tratta di un bug di IPython Widget? Qual è il modo corretto per causare l'aggiornamento della vista?
Infatti, per i widget di elenco, sembra che devo cancellare le opzioni e assegnare nuovamente le opzioni per far sì che il display dei widget si aggiorni. Qualcuno ha un'esperienza simile?
Aggiornamento: la risposta nluigi sotto grandi opere. Come mostrato nell'esempio seguente.
class test(object):
def __init__(self):
self.foo_widget = widgets.Dropdown(description='Lorem ipsum', width=100)
self.foo_widget.options = ['Default', 'A', 'B', 'C', 'D']
self.foo_widget.on_trait_change(self.handler, 'value')
display(self.foo_widget)
def handler(self, name, old, new):
print(self.foo_widget.value)
print(self.foo_widget.selected_label)
self.foo_widget.value = 'Default'
self.foo_widget.selected_label = 'Default'
Grazie nluigi. Funziona alla grande! –