将ipywidgets放入Jupyter笔记本中的HTML

16

通过以下的最简示例,我可以创建按钮,使其与 Jupyter notebook 和在 Notebook 中显示的 HTML 表格进行交互。

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>'
    ))
生成的结果是: 表格和按钮截图 现在我想把这些按钮放在HTML表格中。我尝试调查方法 Widget._ipython_display_(),但这不允许我在自己的HTML表格中使用按钮。
(请参见作为示例的小表格。我想将按钮放在大表格中,并使用按钮从数据库中删除行。)
这个问题中,他们想知道如何相对于其他部件放置小部件。在这里,我想将小部件放在其他HTML代码中。
1个回答

9

似乎没有简单的方法来实现这个。你要么需要构建一个自定义的ipywidget来显示表格,要么手动编写HTML按钮的代码并完全控制它。

我能找到的最好的方法是使用VBox数组在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)

结果:

在这里输入图片描述


这是一个显示图片的HTML代码。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接