【问题标题】:Delete/hide HBox and children widgets using Button inside HBox使用 HBox 内的 Button 删除/隐藏 HBox 和子小部件
【发布时间】:2019-08-29 20:48:22
【问题描述】:

我正在尝试为我制作的模块制作一个输入小部件 (see this SO question)。

输入小部件下面应该有一个标题栏和可变数量的输入行。我想在每个输入行的末尾都有一个删除按钮。

删除按钮应该理想地删除容器小部件和所有子小部件,但隐藏容器小部件和子小部件也是可以接受的。

我还没有找到解决这个问题的有用方法。

目前我得到了这个代码,但我不知道如何解决这个问题。

import ipywidgets as w
​
def add_btn_clicked(b):
    input_box.children = (input_box.children[0], line()) + input_box.children[1:]
​
def delete_btn_clicked(b):
    # ???
    with output:
        print(b.keys)
    return None

add = w.Button(icon="plus-circle")
add.on_click(add_btn_clicked)
​
title = w.HBox([w.Label(value=str(i)) for i in range(3)]+[add])
​
def line():
    delete = w.Button(icon="trash")
    delete.on_click(delete_btn_clicked)
    return w.HBox([w.FloatText(value=i) for i in range(3)]+[delete])
​
input_box = w.VBox([title,line()])
output = w.Output()
​
display(input_box)
display(output)

有没有办法通过按钮点击或其他方式来判断父元素是什么?

【问题讨论】:

    标签: python ipywidgets


    【解决方案1】:

    您可以分别创建小部件和容器,然后将子组件上的.parent 属性定义为容器,然后再组装在一起。这样,您可以在单击按钮时有效地隐藏容器(使用.parent.layout.display = 'none')。

    import ipywidgets as w
    
    def add_btn_clicked(b):
        input_box.children = (input_box.children[0], line()) + input_box.children[1:]
    
    def delete_btn_clicked(b):
        b.parent.layout.display = 'none'
    
    add = w.Button(icon="plus-circle")
    add.on_click(add_btn_clicked)
    
    title = w.HBox([w.Label(value=str(i)) for i in range(3)]+[add])
    
    def line():
        delete = w.Button(icon="trash")
        delete.on_click(delete_btn_clicked)
        val_widgets = [w.FloatText(value=i) for i in range(3)]
        container = w.HBox()
        delete.parent = container
        for widg in val_widgets:
            widg.parent = container
        children = val_widgets + [delete]
        container.children = children
        return container
    
    input_box = w.VBox([title,line()])
    output = w.Output()
    
    display(input_box)
    display(output)
    

    【讨论】:

      猜你喜欢
      • 2012-08-25
      • 1970-01-01
      • 2021-10-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-15
      • 2012-09-20
      • 2021-11-28
      • 1970-01-01
      相关资源
      最近更新 更多