2016-05-30 26 views
9

Aşağıdaki minimal örnekte, Jupyter dizüstü bilgisayarla ve düğmelerde görüntülenen bir HTML tablosuyla etkileşimde bulunan düğmeler oluşturabilirim.ipywidgets öğesini Jupyter defterine HTML içine yerleştirin

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>' 
    )) 

üretilen sonucudur: screenshot of table and buttons

Şimdi html tablodaki düğmeleri yerleştirmek istiyoruz. Widget._ipython_display_() yöntemini araştırmayı denedim ancak bu, düğümü kendi html tablomun içinde kullanmama izin vermiyor.

(örnek olarak küçük tablosuna bakın. Büyük bir tablodaki düğmeleri yerleştirmek ve bir veritabanından satırları silmek için düğmeleri kullanmak istiyorum.) this question yılında

, nasıl, bilmek istedim Widget'ları birbirine göre yerleştirin. Burada, widget'ları diğer HTML kodunun içine yerleştirmek istiyorum.

cevap

3

Bunu başarmanın kolay bir yolu yoktur. Bir tabloyu görüntülemek için özel bir ipywidget oluşturmanız veya tam kontrole sahip olduğunuz bir HTML düğmesinin kodunu manuel olarak yazmanız gerekecektir.

Bir HBox içindeki vbox bir dizi kullanarak bir tablo taklit bir yoluydu bulabildiğim en iyi:

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) 

Sonuç:

enter image description here

İlgili konular