2016-05-30 15 views
9

Con il seguente esempio minimo, posso creare pulsanti che interagiscono con il taccuino Jupyter e una tabella HTML, che viene visualizzata nel blocco note.Posiziona ipywidgets in HTML nel notebook Jupyter

import ipywidgets 
from IPython.display import display 

from IPython.core.display import HTML 

def func(btn): 
    print('Hi!') 

btn1 = ipywidgets.Button(description="Click me!") 
btn1.on_click(func) 
btn2 = ipywidgets.Button(description="Click me!") 
btn2.on_click(func) 
display(btn1) 
display(btn2) 

display(HTML(
     '<table>' + 
     '<tr><td>Something here</td><td>Button 1 here</td></tr>' + 
     '<tr><td>Something here</td><td>Button 2 here</td></tr>' + 
     '</table>' 
    )) 

Il risultato prodotto è: screenshot of table and buttons

ora mi piacerebbe mettere i pulsanti nella tabella HTML. Ho provato a studiare il metodo Widget._ipython_display_() ma questo non mi permette di usare il pulsante all'interno della mia tabella html.

(si veda la piccola tavola come un esempio. Voglio mettere i pulsanti in un grande tavolo e utilizzare i pulsanti per eliminare le righe da un database.)

Nel this question, il voleva sapere, come posiziona i widget l'uno rispetto all'altro. Qui, voglio posizionare i widget all'interno di un altro codice HTML.

risposta

3

Non sembra essere un modo semplice per raggiungere questo obiettivo. Dovrai creare un ipywidget personalizzato per visualizzare una tabella o scrivere manualmente il codice per un pulsante HTML di cui avrai il pieno controllo.

Il migliore che ho trovato è stato un modo per emulare una tabella utilizzando una matrice di vbox all'interno di un HBox:

import ipywidgets as widgets 
from IPython.display import display 

def func(btn): 
    print('Hi!') 

btn1 = widgets.Button(description="Click me!") 
btn1.on_click(func) 
btn2 = widgets.Button(description="Click me!") 
btn2.on_click(func) 

# This is where you fill your table 
cols = [ 
    # Each tuple contains a column header and a list of items/widgets 
    ('Col1', ['hello', 'goodbye']), 
    ('Col2', ['world', 'universe']), 
    ('Buttons', [btn1, btn2]), 
] 

vboxes = [] 
for header, data in cols: 
    vboxes.append(widgets.VBox([widgets.HTML('<b>%s</b>' % header)] + [ 
     d if isinstance(d, widgets.Widget) else widgets.HTML(str(d)) for d in data], 
    layout=widgets.Layout(border='1px solid'))) 

hbox = widgets.HBox(vboxes) 

display(hbox) 

Risultato:

enter image description here

Problemi correlati