2015-09-04 2 views
7

Ich habe einen Drop-Down-Widget:In IPython Widgets, wie Sie das DropDown Widget mit neuen Werten aktualisieren?

self.foo_widget = widgets.Dropdown(description='Lorem ipsum', width=100) 
self.foo_widget.options = ['Default', 'A', 'B', 'C', 'D'] 

Und ich fange die on_trait_change Veranstaltung:

self.foo_widget.on_trait_change(self.handler, 'value') 

nun in der Handler-Funktion handler, ich mag den DropDown Wert wieder auf 'Default' gesetzt. Der folgende Code ändert jedoch nur den Wert, ohne die Widgetanzeige zu aktualisieren. Der DropDown zeigt immer noch den ursprünglichen Auswahlwert (z. B. "C"), obwohl print self.foo_widget.value als "Standard" angezeigt wird.

self.foo_widget.value = 'Default' 

Ist das ein Fehler von IPython Widget? Was ist der richtige Weg, um das Update der Ansicht zu verursachen?

In der Tat, für die Liste Widgets scheint es, ich muss die Optionen löschen und Optionen erneut zuweisen, um die Widgets Anzeige zu aktualisieren. Hat jemand ähnliche Erfahrung?

Update: die Antwort von nluigi unter großen Werke. Wie im folgenden Beispiel gezeigt.

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' 

Antwort

5

Per der specification der Selektionsklasse, müssen Sie auch das selected_label Attribut 'Default' setzen Sie das Widget-Update zu haben:

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

Dank nluigi. Das funktioniert großartig! –

Verwandte Themen