如何在IPython/Jupyter中将小部件添加到容器小部件

3

我正在尝试创建一个VBox小部件,并在点击按钮时添加一行文本。

我尝试了以下代码:

import ipywidgets as wg
from ipywidgets import Layout
from IPython.display import display

vb = wg.VBox([wg.Text('1'),wg.Text('2')])
btn = wg.Button(description = 'Add') 

def on_bttn_clicked(b):        
    vb.children=tuple(list(vb.children).append(wg.Text('3'))) 

btn.on_click(on_bttn_clicked)
display(vb, btn)

list(hb.children)

但是赋值 "hb.children=" 无法正常工作... 是否有一种方法可以在同一个单元格中使用代码编辑容器小部件?

“Does not work” 是什么意思? - Bonifacio2
这行代码 vb.children=tuple(list(vb.children).append(wg.Text('3')) 可能是你主要的问题所在:list(vb.children).append(wg.Text('3') 返回值是 None,因此你将 None 传递给了 tuple 构造方法。实际上,这应该会抛出一个错误。请在此处分享该错误信息。 - Abdou
1
是的,@Abdou,你说得对。append方法返回None。我修改了代码 def on_bttn_clicked(b): temp = list(vb.children) temp.append(wg.Text('3')) vb.children=temp 现在它可以正常工作了! - Stanislav Popovych
@StanislavPopovych 很好!你应该回答自己的问题 =) - Rodrigo E. Principe
1个回答

8
你可以使用简单的加号来连接两个列表。 vb.children=tuple(list(vb.children) + [new_button]) 因此,你的完整代码将是这样的:
import ipywidgets as wg
from ipywidgets import Layout
from IPython.display import display

vb = wg.VBox([wg.Text('1'),wg.Text('2')])
btn = wg.Button(description = 'Add') 

def on_bttn_clicked(b):        
    vb.children=tuple(list(vb.children) + [wg.Text('3')]) 

btn.on_click(on_bttn_clicked)
display(vb, btn)

list(vb.children)

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