2015-09-04 7 views
7

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' 

risposta

5

Per la specification della classe di selezione, è necessario anche impostare l'attributo selected_label per 'Default' per avere l'aggiornamento widget

self.dropDown.value = 'Default' 
self.dropDown.selected_label = 'Default' 
+0

Grazie nluigi. Funziona alla grande! –