gpt4 book ai didi

python - 使用 HBox 内的 Button 删除/隐藏 HBox 和子窗口小部件

转载 作者:太空宇宙 更新时间:2023-11-03 20:27:31 26 4
gpt4 key购买 nike

我正在尝试为我制作的模块( 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)

有没有办法通过按钮单击来判断父元素是什么,或者通过其他方式来实现我正在尝试的目标?

最佳答案

您可以分别创建小部件和容器,然后将子部件的 .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)

关于python - 使用 HBox 内的 Button 删除/隐藏 HBox 和子窗口小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57717562/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com