используйте ipywidget interactive () с опцией manual = True - PullRequest
0 голосов
/ 29 августа 2018

Я обновляю блокноты jupyter с интерактивными виджетами до более новой версии (ipywidgets 7.2.1).

Раньше было interactive() функций, которые выполнялись вручную нажатием кнопки (функция __manual=True). Однако теперь я не могу воспроизвести такое же поведение.

Вот минимальный пример:

from ipywidgets import interactive, interact_manual
import ipywidgets as widgets

def do_sth(x):
    #do sth with the argument passed
    print("done "+str(x))

nb = widgets.BoundedIntText(description='Number:')

#Interaction in accordion nested in a tab
tab = widgets.Tab()
tab.set_title(0, 'Page 1')

#old method 
#problem: it is not manual anymore
w = interactive(do_sth, x=nb, __manual=True)

#new solution 1
#problem: the widget appears also outside the tab/accordion
w1 = interact_manual(do_sth, x=nb)
w1.widget.children[1].description = 'do sth' #seems a bit of a hack

#new solution 2
w2 = interactive(do_sth, x=nb, manual=True) #does no pass the manual option
#if I set it manually with:
#w2.manual = True 
#It generates an error (AttributeError: 'interactive' object has no attribute 'manual_button')

accordion = widgets.Accordion(children=[w, w1.widget, w2])
accordion.set_title(0, 'old interaction 0')
accordion.set_title(1, 'new interaction 1')
accordion.set_title(2, 'new interaction 2')

tab.children = [accordion]

tab

Можно ли использовать решение 1 и не допустить появления виджета дважды? Иначе, есть ли другой способ сделать это?

1 Ответ

0 голосов
/ 05 сентября 2018

Кажется, что они могли перевести его в режим диктовки, добавив возможность переименовать кнопку.

Попробуйте

w2 = interactive(do_sth, {'manual' : True, 'manual_name' : 'Do Something'}, x=nb)

...